Интеграционное тестирование — Selenium

В моем последнем посте я рассмотрел малоизвестную интеграционную среду тестирования под названием Fitnesse. В этом посте я собираюсь посмотреть на один из самых известных — Selenium .

Selenium — это чисто веб-ориентированная платформа для тестирования интеграции. Каркас состоит из 2 основных компонентов — IDE и сервера Selenium Remote Control (RC).

Selenium IDE — это надстройка Firefox, которая записывает клики, ввод текста и другие действия для выполнения теста, который можно воспроизвести в браузере. Тесты могут быть сохранены на нескольких языках, включая C #. Если вы выберете опцию C #, тесты будут сохранены как тесты NUnit.   Затем тесты выполняются в нескольких браузерах с использованием Selenium RC. Расширение Selenium RC под названием Selenium Grid позволяет вам запускать несколько тестов параллельно. На сайте Selenium есть очень хорошее 2-минутное введение .

Первое, что вы заметите в Selenium — это отсутствие надлежащей документации. Как и во многих проектах с открытым исходным кодом, документация, кажется, пропадает по пути.

пример

Чтобы проиллюстрировать магию Selenium, я создал очень простой веб-сайт, который рассчитывает возраст пользователя на основе его года рождения и текущего года.

Удивительно — разве вы не хотите, чтобы был такой сайт?

Я также собираюсь создать тест, используя Selenium IDE для проверки этих значений. Записать тест очень просто: вы запускаете IDE, нажимаете «запись» и делаете все, что хотите. Разница лишь в том, что я собираюсь проверить результат, возвращаемый с сервера.

Ничего подобного. Вы также можете увидеть код, сгенерированный во время записи теста — довольно круто. Теперь я просто решил экспортировать тесты как C #.

[TestFixture]
public class NewTest
{
    private ISelenium selenium;
    private StringBuilder verificationErrors;

    [SetUp]
    public void SetupTest()
    {
        selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://localhost:57800/");
        selenium.Start();
        verificationErrors = new StringBuilder();
    }

    [TearDown]
    public void TeardownTest()
    {
        try
        {
            selenium.Stop();
        }
        catch (Exception)
        {
            // Ignore errors if unable to close the browser
        }
        Assert.AreEqual("", verificationErrors.ToString());
    }

    [Test]
    public void TheNewTest()
    {
        selenium.Open("/Home");
        selenium.Type("currentYear", "2010");
        selenium.Type("birthYear", "1983");
        selenium.Click("//input[@value='Calculate age']");
        selenium.WaitForPageToLoad("10000");
        try
        {
            Assert.AreEqual("27", selenium.GetValue("result"));
        }
        catch (AssertionException e)
        {
            verificationErrors.Append(e.Message);
        }
    }
}

Как видите, тесты выполняются из NUnit. Хотя это звучит довольно странно, на самом деле это довольно полезно — например, добавить ваши тесты Selenium в процесс сборки довольно просто. Кроме того, элементы страницы сопоставляются по идентификатору — если я изменю макет моей страницы, тесты внезапно не пройдут.

Итак, теперь мы просто запускаем Selenium RC и запускаем тесты.

Довольно аккуратно.

Что мне нравится в Selenium

IDE . Это, пожалуй, самое большое преимущество Selenium перед аналогичными системами. Хотя поначалу это может показаться не таким уж большим делом (написание кода в этом примере не так уж и сложно), это ускоряет весь процесс и позволяет тестировщикам создавать интеграционные тесты для вас . По этой простой причине я бы предпочел Selenium, а не любую другую систему веб-тестирования.

Selenium также позволяет запускать ваши тесты в IE, Firefox, Safari и Opera. (Поддержка других браузеров, таких как Chrome, также возможна в зависимости от настроек безопасности браузера). На самом деле это довольно аккуратно, потому что вы сразу заметите любые изменения, которые работают в некоторых браузерах, но не в других.

Вещи, которые мне не нравятся в Selenium

Присмотритесь к результатам моих модульных тестов — этот тест занял 17 секунд . А выполнил тест еще пару раз, и в среднем он составляет около 7 секунд. Таким образом, первый запуск занял гораздо больше времени, но 7 секунд все еще довольно много времени. Если вы смотрите на 500 или 600 интеграционных тестов, то ваши интеграционные тесты займут не менее часа. Чтобы быть справедливым, мы должны сравнить это с аналогичными платформами, и мы всегда можем использовать Selenium Grid для параллельного запуска тестов, поэтому вы можете обнаружить, что это на самом деле самая быстрая из доступных сред. Просто помните, что интеграционные тесты занимают много времени.

Документации . Хотя у Selenium есть довольно аккуратный раздел документации , здесь не хватает пары элементов. Во-первых, документация по коду на клиентских драйверах (в данном случае, сборка .Net) отсутствует. Например, посмотрите на строку, где мы ожидаем загрузки страницы.

Если вы хотите знать, что делает этот метод или что это за параметр (секунды, миллисекунды… строка?), Вам, вероятно, нужно сделать обоснованное предположение или надеяться, что кто-то написал об этом в блоге. (Я думаю, это миллисекунды, кстати)

Сгенерированный код также не так уж и хорош — это, вероятно, придирчиво, но генерирование кода, который делает заразительное исключение, определенно не является хорошей идеей.

Установка также может быть намного проще. Для начала, Selenium Core доступен как отдельная и ненужная загрузка (вам просто нужны IDE и RC). Если вы чем-то похожи на меня, то вы собираетесь скачать его, немного подурачиться с ним, а потом раздражаться, потому что он вам не нужен. Кроме того, загрузка RC содержит драйверы клиента для всех 6 языков, поддерживаемых Selenium. Это означает, что 99% разработчиков будут загружать драйверы для 5 языков, которые они не собираются использовать. Наконец, не упоминается о том, как на самом деле запустить RC-сервер. Fitnesse также использует сервер Java, но включает в себя файл .bat для разработчиков, незнакомых с Java. Это не имеет большого значения, но это делает вашу жизнь немного сложнее. (Вам нужно запустить java –jar selenium-server.jar для начала, кстати)

Резюме

Selenium — один из лучших, если не самый лучший инструмент для тестирования веб-приложений. Легкость, с которой можно создавать и запускать тесты, выделяет их среди аналогичных сред. Поддержка нескольких браузеров обширна, и тесты могут быть легко интегрированы в автоматизированный процесс сборки.

преимущества
  • IDE заботится о тестировании сценариев
  • Может использоваться тестировщиками без знания кодирования
  • Поддерживает несколько браузеров
  • Может запускать тесты параллельно с Selenium Grid
Недостатки
  • Документация отсутствует в некоторых областях
  • Сгенерированный код не так уж велик

В следующем посте я расскажу о новой облегченной платформе автоматизации тестирования Microsoft .

Author: admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *