четверг, 29 октября 2009 г.

Selenium и Perl

Selenium IDE позволяет экспортировать записанный автотест в несколько популярных языков программирования. Один из них perl, который я и использую в практической деятельности.
Экспорт производится из меню "Файл"->export test case as и далее выбирается нужный язык программирования. Для экспорта в perl выбираем "Perl-Selenium RC".

Что такое Selenium RC подробно буду описывать в последующих постах. Сейчас достаточно сказать лишь, что это отдельный продукт Селениума, который представляет из себя сервер, принимающий команды из, которых и состоит скриптовый автотест.


В результате экспорта получаем перловый скрипт.
Для рассмотренного в предыдущем посте примера с автотестом на гмейл получим перл-скрипт со следующим содержанием:

use strict;
use warnings;
use Time::HiRes qw(sleep);
use Test::WWW::Selenium;
use Test::More "no_plan";
use Test::Exception;

my $sel = Test::WWW::Selenium->new( host => "localhost",
port => 4444,
browser => "*chrome",
browser_url => "http://www.google.ru/" );

$sel->open_ok("/");
$sel->click_ok("link=Gmail");
$sel->wait_for_page_to_load_ok("30000");
$sel->is_text_present_ok("Добро пожаловать в почту Gmail");


Для того, чтобы можно было выполнить этот скрипт необходим сам интерпретатор perl и модуль Test::WWW::Selenium, который можно взять с CPANа. Этот компонент представляет из себя perl-драйвер селениумовских автотестов. Для каждого языка программирования, в который возможен эскпорт автотестов есть свой драйвер.

Модуль довольно весомый и имеет много зависимостей - смело ставьте все, что попросит )
Очень подозреваю, что этот модуль кросплатформенный, но я пользовался им только в linux.

Итак, perl у нас есть, все необходимые модули для запуска.

добавляем права на запуск и выполняем скрипт : perl gmail_test_01.pl

В результате видим сообщение: Error requesting http://localhost:4444/selenium-server/driver/:
500 Can't connect to localhost:4444


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

О том как настроить и запустить RC (Remote Control) и о том, как он работает, я напишу в следующем посте...

понедельник, 26 октября 2009 г.

о Selenium IDE

Знакомство с продуктами Selenium лучше начинать с Selenium IDE.
Для начала необходимо установить броузер Mozilla Firefox.
Далее в меню "Инструменты"->"Дополнения" необходимо найти аддон Selenium IDE и установить его. После установки и перезапуска броузера можно начинать записывать свой первый тест.

Для наглядности пусть наш первый автотест проверяет доступность сайта gmail.com и наличие на его стартовой странице тех или иных записей.

1. Меню "Инструменты"->"Selenium IDE" - должно появиться окошко с конструктором тестов
2. откройте новую вкладку и наберите в адресной строке http://google.com
3. перейдите в IDE и заполните поле "Базовый url" значени "http://google.com"
4. начните запись теста нажатием на красный кружок
5. перейдите на вкладку с гуглом и нажмите ссылку gmail - в результате IDE должна записать нам первые команды автотеста:
  • open /
  • click link=Gmail
6. критерием успешности теста для простоты выберем факт наличия на полученной странице надписи "Добро пожаловать в почту Gmail" . Чтобы записать в тест команду такой проверки нажмите правой кнопкой мыши на надписи "Добро пожаловать в почту Gmail" и щелкните по "verifyTextPresent (....)" - это действие добавит в сценарий вашего автотеста соответсвующую команду проверки. Для первого теста достаточно проверок!)
7. Останавливаем запись теста нажатием на красный кружок.
8. Проверяем работоспособность теста нажатием на кнопку с хинтом "Play current test case" (имейте ввиду, что IDE прогоняет тест в текущей активной вкладке:) - в результате скорее всего вы увидите, что тест не прошел (красная строка "false")
В чем же дело? Ведь мы прогнали тест той же утилитой, которой его и записали!
Причина в том, что IDE записала в сценарий теста команду click, выполняя ее драйвер тестов не должидается загрузки нового содержимого броузера, а сразу выполняет следующую команду (у нас это verifyTextPresent). Понятно, что моментально страницы не грузятся даже при очень быстром коннекте, и , следовательно, на момент проверки наличия текста, его еще нет в природе (то есть , в броузере) и тест проваливается. Чтобы данный тест прошел необходимо заменить команду click на clickAndWait. Сделать это нужно вручную. Щелкаете на команде и редактируете поле "Command", заменяя строку "click" на "clickAndWait". Бага это или фича IDE? Скорее "особенность реализации", ведь в некоторых случаях нужен действительно click.

9. Прогоняем еще раз записанный тест и видим , что на этот раз он "прошел" успешно.

Отмечу, что в IDE есть возможность настройки для таймаута на загрузку страницы. По-умолчанию этот таймаут равен 30000 милисекунд. То есть, данный тест провалится , если в течении 30 сек. от гугла не удастя получить страницу с искомой надписью.


Полученный тест можно сохранять в файл и даже экспортировать в некоторые наиболее популярные высокоуровневые языки программирования: java, c#, perl. В своей повседневной рабочей деятельности я имею дело с perl , поэтому в одном из следующих постов я опишу, как программно работать с selenium , используя perl.

Записывая тесты с помощью Selenium IDE время от времени вы будете сталкиваться с тем, что не все она умеет делать автоматически и не все автоматически делает так как нужно именно вам (см. пример выше). Скажу только, что всегда можно добавлять команды вручную и всегда можно искать нужные элементы html-страниц с помощью Xpath. Для получания корректного xpath пользуйтесь расширением дополнения Firebug. Ну и если какие трудности с этим, обращайтесь - постараюсь помочь.

Файлы:
Пример теста, который можно открыть в Selenium IDE для выполнения и модификации.

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

четверг, 22 октября 2009 г.

Опыт реального применения Selenium

Есть одна софтверная контора N, в которой я трудоустроен на должности QA-lead.
Основным продуктом , кормящим сотрудников этой фирмы, является некая биллинговая система на perl+Си . Она имеет веб интерфейс оператора , реализованный также на perl.
За все время существования продукта делались несколько редких и робких попыток автоматизации лишь части рутинного ручного тестирования перлового gui. Но все заканчивалось ничем. Так происходило по большей части из-за того, что веб-интерфейс , так скажем, некритичная часть нашего продукта и тратить время на автоматизацию никто не хотел. До не давнего времени...
В связи с известными фин.трудностями по всему миру у нас прошла волна сокращений.. Фронт работ не уменьшился, но штат тестировщиков уполовинился. Так как несмотря ни на что лозунг остался тот же "Качество, качество и еще раз качество" было решено взять постепенный курс на автоматизацию.. в т.ч. и GUI (гром не грянет мужик не перекрестится).
Для автоматизации GUI были выбраны продукты Selenium.
В следующих постах я буду подробно останавливаться на всех стадиях внедрения Selenium - продуктов, вплоть до инструкций по инсталляции и примеров развертывания...