Автоматизация тестирования веб-приложений

Большинство программных продуктов, выпускаемых сегодня, являются веб-ориентированными приложениями, расчитанными на работу в интернет-браузере. Эффективность тестирования подобных приложений отличается в различных компаниях и организациях. В эпоху высокой интерактивности и взаимодействия в процессе разработки программ, когда многие организации используют методологию Agile в той или иной форме, автоматизация тестирования часто становится необходимостью. Под автоматизацией тестирования подразумевается использование инструментов для того, чтобы многократно выполнять повторяющиеся тесты для тестируемого приложения. Регрессионное тестирование является наиболее типичным примером применения этого подхода.

Автоматизированное тестирование обладает множеством достоинств, связанных главным образом с высокой скоростью выполнения тестов и возможностью выполнять однотипные тесты снова и снова. Существует большое количество как коммерческих, так и бесплатных инструментов, помогающих в разработке автоматизированных тестов. Selenium, вероятно, является наиболее распространенным среди инструментов с открытым кодом (open source). Данное руководство поможет как новичкам, так и опытным пользователям Selenium освоить эффективные методы автоматизации тестов для веб-приложений.

В этом руководстве содержится введение в Selenium, описываются его особенности, представлены общепринятые приемы использования (best practices), выработанные сообществом пользователей Selenium. Приведено множество примеров. Кроме того, в руководстве содержится техническая информация, касающаяся внутренней структуры Selenium.

Автоматизированное тестирование обеспечивает преимущества, которые могут повысить эффективность работы отдела тестирования в долгосрочной перспективе. Автоматизированное тестирование позволяет:

  • проводить чаще регрессионное тестирование
  • быстро предоставлять разработчикам отчет о состоянии продукта
  • получить потенциально бесконечное число прогонов тестов
  • обеспечить поддержку Agile и экстремальным методам разработки
  • сохранять строгую документацию тестов
  • обнаружить ошибки, которые были пропущены на стадии ручного тестирования

Автоматизация - быть или не быть?

Всегда ли автоматизация выгодна? В каких случаях будет правильно принять решение об автоматизации тестов?

Не всегда полезно автоматизировать тесты. Иногда ручное тестирование может оказаться более подходящим. Например, если графический интерфейс приложения сильно изменится в ближайшем будущем, автоматизированные тесты придется переписывать. К тому же, иногда попросту не хватает времени на автоматизацию. В краткосрочной перспективе ручное тестирование может быть более эффективно. Если приложение должно быть выпущено в очень сжатые сроки, у вас нет готовых автоматизированных тестов, но протестировать в срок необходимо, то ручное тестирование является лучшим решением.

Представляем Selenium

Selenium - это комплект из нескольких инструментов, каждый из которых предполагает свой собственный подход к автоматизации тестирования. Большинство инженеров-тестировщиков, которые работают с Selenium, фокусируются на одном-двух инструментах из этого набора, которые лучше всего отвечают их нуждам. Однако изучение всех имеющихся в распоряжении инструментов позволит вам лучше понять все доступные возможности для решения проблем, которые возникают при автоматизации тестов. В совокупности набор инструментов Selenium предоставляет богатый набор возможностей, специально собранных вместе для тестирования всех типов веб-приложений. Selenium предоставляет несколько вариантов для идентификации элементов интерфейса, сравнения ожидаемого и наблюдаемого поведения тестируемого приложения. Одной из ключевых особенностей Selenium является возможность запуска одних и тех же тестов в различных браузерах.

Краткая история проекта Selenium

Selenium впервые появился на свет в 2004 году, когда Джейсон Хаггис (Jason Huggins) тестировал программное обеспечение для компании ThoughtWorks. Будучи человеком неглупым он понимал, что своему времени можно найти лучшее применение, чем вручную снова и снова повторять одни и те же тесты. Он разработал JavaScript-библиотеку, которая могла осуществлять взаимодействие с элементами веб-страницы и позволяла ему автоматически запускать тесты сразу в нескольких браузерах. Эта библиотека в итоге стала Selenium Core (ядром Selenium), которое лежит в основе всей функциональности Selenium Remote Control (RC) и Selenium IDE. Инновационность Selenium RC заключалась в том, что ни один другой инструмент не позволял выбирать язык программирования для управления браузером.

Впрочем, хотя Selenium и был замечательным инструментом, он все же был не лишен недостатков. Так как ядро было реализовано на JavaScript, многие вещи было невозможно осуществить из-за ограничений безопасности браузеров. Ситуацию усугубляло еще и то, что веб-приложения становились все мощнее, используя специфические особенности новейших браузеров, что делало ограничения Selenium все более и более раздражающими.

В 2006 году отважный инженер из Google по имени Саймон Стюарт (Simon Stewart) начал работу над проектом, который он назвал WebDriver. К тому времени Google широко использовал Selenium, но тестировщикам приходилось искать пути для обхода его ограничений. Саймон хотел сделать инструмент для тестирования, который бы общался с браузером используя нативные методы операционной системы и браузера, что позволило бы избежать ограничений изолированной среды JavaScript. Проект WebDriver был призван устранить слабые места Selenium.

Вернемся в 2008 год. Олимпийские игры в Пекине позволили Китаю заявить о себе, как о глобальном лидере, ипотечный дефолт в США спровоцировал самый большой финансовый кризис со времен Великой Депрессии. Преждевременная кончина Хита Леджера привела к тому, что фильм «Темный Рыцарь» посмотрел каждый человек на планете (дважды). Но самым важным событием того года стало слияние Selenium и WebDriver. У Selenuim имелась коммерческая поддержка и огромное сообщество, но было очевидно, что WebDriver - это инструмент будущего. Объединение двух инструментов снабдило всех пользователей общим набором средств разработки (фичей) и собрало самые яркие умы в автоматизации тестирования под одной крышей. Возможно лучшее объяснение слияния WebDriver и Selenium дал сам Саймон Стюарт, создатель WebDriver, в своем письме к сообществам WebDriver и Selenium от 6 августа 2009 года:

«Почему происходит слияние? Отчасти от того, что WebDriver устраняет некоторые несовершенства в Selenium (например, способность обойти ограничения изолированной среды JavaScript, а еще у нас роскошный API), отчасти потому, что Selenium учитывает некоторые недостатки в WebDriver (такие как поддержка различных браузеров) и отчасти от того, что основные разработчики Selenium и я считаем, что это лучший способ предложить пользователям самый лучший фреймворк»

Набор инструментов Selenium

Selenium состоит из нескольких инструментов, каждый из которых имеет свое назначение.

Selenium 2 (или Selenium Webdriver)

Selenium 2 - последнее пополнение в пакете инструментов Selenium и является основным вектором развития проекта. Это абсолютно новый инструмент автоматизации, который обеспечивает отличный набор возможностей для управления браузером, имеет более целостный и объектно-ориентированный программный интерфейс (API), а также не имеет ограничений, свойственных более ранним версиям.

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

Результатом этого слияния стал Selenium 2. Этот инструмент предоставляет для использования WebDriver API, а в качестве ядра может использоваться как более новая собственная реализация WebDriver, так и реализация, которая лежала в основе Selenium 1. Кроме того, в Selenium 2 встроен интерфейс Selenium RC для обеспечения обратной совместимости. Это, в частности, позволяет без особых усилий мигрировать существующие тесты на новую версию.

Selenium 1 (или Selenium Remote Control)

Как вы уже знаете из главы Краткая история проекта Selenium, на протяжении длительного времени Selenium RC был основным направлением развития проекта, пока в результате слияния WebDriver и Selenium не появился Selenium 2, более новый и мощный инструмент.

Selenium 1 все еще активно поддерживается (в основном в режиме сопровождения), потому что он предоставляет некоторые возможности, которые все еще недоступны в Selenium 2, включая поддержку некоторых языков программирования (например, Perl) и поддержку всевозможных браузеров.

Selenium IDE

Selenium IDE (Integrated Development Environment, встроенная среда разработки) - инструмент для разработки и создания прототипов тестовых сценариев. Это плагин для браузера Firefox, с простым и удобным интерфейсом для создания автоматизированных тестов. В Selenium IDE встроена функция записи, которая позволяет записывать действия, совершаемые пользователем, и затем сохранять их в виде кода на одном из языков программирования, поддерживаемых Selenium.

Selenium Grid

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

Какой же инструмент Selenium выбрать

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

Однако мы не рекомендуем строить всю автоматизацию тестирования на базе Selenium IDE. Для наиболее эффективного использования Selenium, вам необходимо создавать и запускать тесты при помощи Selenium 2 или Selenium 1 в сочетании с одним из поддерживаемых языков программирования. Выбор языка - на ваше усмотрение.

На момент написания данного руководства разработчики планируют в дальнейшем развивать WebDriver API, также известный как Selenium 2. Selenium 1 поддерживается лишь для обеспечения обратной совместимости. Однако обе версии имеют свои недостатки и преимущества, которые описаны в соответствующих разделах данного руководства.

Тем, кто начинает свое знакомство с Selenium, мы рекомендуем прочитать руководство целиком. Однако если вы только-только начинаете разрабатывать тесты с использованием Selenium, и будете создавать свои тесты с чистого листа, мы советуем использовать Selenium 2, так как именно эта ветвь будет разрабатываться и поддерживаться сообществом в будущем.

Поддерживаемые браузеры и платформы

Список поддерживаемых браузеров в Selenium варьируется, в зависимости от того, используете ли вы WebDriver или Selenium RC.

WebDriver

WebDriver поддерживает следующие браузеры и операционные системы:

  • Google Chrome
  • Microsoft Internet Explorer
  • Microsoft Edge
  • Mozilla Firefox
  • Opera
  • HtmlUnit
  • PhantomJS
  • Android (with Selendroid or appium)
  • iOS (with ios-driver or appium)

Selenium RC

* Тесты, созданные в Firefox с помощью Selenium IDE, можно запустить в любом другом поддерживаемом браузере, используя специальный режим запуска Selenium RC.

** При помощи сервера Selenium RC можно запустить любой исполняемый файл браузера, но настройки безопасности браузера могут накладывать технические ограничения, что приведет к тому, что некоторые функции не будут работать

Возможности гибкой настройки и расширения функциональности

Selenium чрезвычайно гибкий инструмент. Существует множество способов добавить функциональность как непосредственно в сами тесты, так и во фреймворк Selenium для индивидуальной подстройки ваших автоматических тестов. Это возможно является самой сильной стороной Selenium в сравнении с другими инструментами автоматизации. Эти возможности расширения функциональности описаны в различных главах данного руководства. Ну и конечно, так как Selenium является продуктом с открытым кодом, вы всегда можете скачать и модифицировать исходный код.

Что содержится в данном руководстве?

Это руководство расчитано как на новичков, так и на тех, кто уже работал с Selenium и хочет расширить свои познания. Мы знакомим новых пользователей с продуктом и не предполагаем наличие большого опыта использования Selenium. Однако мы расчитываем, что пользователь обладает базовыми знаниями в области автоматизированного тестирования. Для более опытных пользователей это руководство может служить справочником, и мы советуем вам ознакомиться с приведенным оглавлением и кратким описанием разделов. Вы можете найти здесь информацию об архитектуре Selenium, о способах его применения, а также главу о техниках проектирования тестов.

Содержание остальных глав:

Selenium IDE
Рассказывает о Selenium IDE и описывает, как использовать интегрированную среду разработки для создания тестов. Если у вас недостаточно опыта в программировании, но вы все равно надеетесь научиться автоматизированному тестированию, это то, с чего вам следует начать. Вы узнаете, что даже при помощи Selenium IDE можно создать достаточно большое количество тестов. Если же вы опытный программист, это глава все еще может быть интересна для вас, так как вы можете использовать Selenium IDE для быстрого создания прототипов тестов. В этом разделе также описывается, как записанный тест можно “экспортировать” в код на языке программирования для добавления в него более сложной функциональности, не поддерживаемой Selenium IDE.
Selenium 2.0 и WebDriver
Рассказывает о разработке автоматических тестов для тестируемого приложения с использованием Selenium 2.
Selenium 1.0 (Selenium RC)
Объясняет, как автоматизировать тесты при помощи Selenium RC API. Содержит множество примеров на разных языках программирования. Здесь описан процесс инсталляции и настройки Selenium RC для использования в различных режимах и конфигурациях, а так же их плюсы-минусы и ограничения. В этой главе приведены примеры решения наиболее частых проблем, с которыми сталкиваются новые пользователи Selenium, например обработка сертификатов безопасности, https-запросы, всплывающие подсказки и открытие нового окна.
Приемы проектирования тестов
Эта глава рассказывает о техниках программирования, которые можно использовать при разработке тестов на WebDriver или Selenium RC. Мы также показываем техники, которые вызывают наибольшее количество вопросов на форумах, такие как создание функций инициализации и завершения, реализация подхода, известного как data-driven testing (тестирование, управляемое данными) и др.
Selenium Grid
Эта глава находится в разработке
Расширение возможностей Selenium
Описывает, как можно модифицировать, настроить или расширить функциональность Selenium.

Команда разработки документации - авторы, прошлые и настоящие

В алфавитном порядке представлены авторы, внесшие значительный вклад в разработку английской версии данного руководства пользователя, его публикацию или и в то, и другое. Мы очень благодарны им всем.

  • Дэйв Хант (Dave Hunt)
  • Люк Инман-Семерау (Luke Inman-Semerau)
  • Мэри Энн Мэй-Пемфрэй (Mary Ann May-Pumphrey)
  • Ноа Сассман (Noah Sussman)
  • Пол Грандьан (Paul Grandjean)
  • Питер Ньюхук (Peter Newhook)
  • Сантьяго Суарез-Ордонез (Santiago Suarez-Ordonez)
  • Симон Стюарт (Simon Stewart)
  • Тарун Кумар (Tarun Kumar)

Благодарность

Особая благодарность выражается Патрику Лайтбоди (Patrick Lightbody), как администратору сайта SeleniumHQ, внесшему основной вклад в разработку Selenium RC. Его поддержка была неоценима во время написания первой версии руководства пользователя. Патрик помог нам понять нашу аудиторию. Он также снабдил нас всем необходимым на сайте seleniumhq.org для публикации документации. Также благодарность выражается Андрасу Хатвани (Andras Hatvani) за то, что посоветовал нам издательские решения, и Амиту Кумару (Amit Kumar) за участие в наших дискуссиях и оказание помощи в редактировании документации.

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

Команда перевода на русский язык

Перевод на русский язык осуществлен при спонсорской поддержке компаний (в алфавитном порядке)

Мы выражаем также благодарность нашим добровольным помощникам, которые принимали участие в переводе документации:

Мы благодарим бюро переводов “Окей”, которое выполнило финальное редактирование всей документации.

И отдельное спасибо команде портала Software-Testing.Ru, которая взяла на себя работы по организации перевода.

Спонсоры перевода








Go to top