Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Функциональное тестирование и Selenium

Посмотрел «Selenium» — прекрасный, на мой взгляд, инструмент для автоматизации функционального тестирования. Из аналогов я нашёл только «Watir», но он мне показался сильно беднее (или только показался?). Платных аналогов много, в том числе от именитых IBM и HP, но хочется именно бесплатного.

Собственный опыт у меня пока небольшой (я написал несколько тестов и бегло прочитал документацию), а из прочитанного в сети я сделал вывод, что у «Селениум» есть проблемы. Вроде как он не любит фреймы (сомнительно) и стабильно работает только в Firefox (мне FF пока достаточно).

Я пока использовал только версию для Firefox (дополнение Selenium IDE). Самый простой способ изготовить тест выглядит следующим образом: открываем Selenium IDE, создаём новый тест, подготавливаем браузер (переходим на страницу, с которой тест начнётся), жмём на красную кнопку записи (справа на панели инструментов), в браузере выполняем какие-то действия, останавливаем запись и смотрим что получилось.

После того как последовательность действий в браузере была записана «Селениумом», нужно посмотреть что получилось, возможно что-то поправить. Язык простой и очень понятный, нужно лишь немного знать английский. В своём первом тесте я лишь вынес в переменную вводимую строку, чтобы позже использовать её в assertion и переделал селектор элемента с XPath на CSS (элементы можно выбирать через XPath, CSS, DOM, ID элемента, regexp и ещё несколькими способами), а так же добавил сам assert, ведь «Селениум» не знает что является успешным завершением теста.

Вот простенький тест, который я записал, что проиллюстрировать принцип:

сохраняем тестовую строку
store THIS-IS-TEST-STRING testPhrase

 открываем страницу в браузере
open /EvgenyStepanischev

 жмём на ссылку, в которой содержится указанное значение и ждём, когда браузер её полностью загрузит
clickAndWait link=EvgenyStepanischev / Тестирование

 жмём на ссылку, которая выбирается CSS-селектором
clickAndWait css=.edittab a.b-button-yellow

 печатаем
type postText ${testPhrase}

 жмём на клавишу с указанным ID
clickAndWait really_save_button1

 проверяем есть ли на странице наш текст
assertTextPresent ${testPhrase}

Чтобы тест выполнился, нужно указать для него базовый URL (по которому будет выполняться тест и нажать кнопку запуска теста и тест сьюта). На нашей внутренней «Вики» в «Яндексе» этот тест откроет мой кластер, найдёт там страницу «Тестирование», нажмёт на ней кнопку редактирования, напечатает в страницу «THIS-IS-TEST-STRING», сохранит изменение и убедится, что введённая строка появилась на странице.

Большинство потребностей покрывается языком «Селениума», для какие-то совсем уж сложных вещей можно использовать JavaScript (блок javascript { … }).

Есть возможность удалённого запуска тестов на нескольких браузерах и использование языков C#, Perl, Ruby, Python, PHP и Java, но я пока с этим богатством не разбирался, первые потребности вполне покрываются тем, что я уже знаю, дальнейшее — дело будущего.

Добавлено 22 ноября 2009 13:40: Андрей Ларионов подсказал ещё один бесплатный продукт — «Tellurium», но я не вижу преимуществ перед «Селениумом», зато вижу недостатки, например, усложнённый (по сравнению с «Селениумом») язык описания тестов.

8 комментариев
rembish.livejournal.com 2009

Я в данный момент учусь в Чехии на MFF Карлова Университета: здесь Селениум проходят в качестве одной из лабораторных работ.

Евгений Степанищев (bolknote.ru) 2009

Комментарий для rembish.livejournal.com:

Ничего ж себе. А не расскажешь, вкратце, что такое Selenium RC, как запускать тесты на нескольких браузерах одновременно и что можно делать на всех этих языках, что поддерживает «Селениум» (я так понимаю, можно писать тесты на средах, родных для этих языках и как-то запускать их в браузерах?)

magicflight.livejournal.com 2009

мы используем селениум вместе с фитнессом ( http://fitnesse.org/ ). В результате получается что то типа таких предложений:
When User Click on button with id «id»
Then value of order field should be «value»
И такие тесты легко писать тестерам даже вместо тест кейсов

Евгений Степанищев (bolknote.ru) 2009

Комментарий для magicflight.livejournal.com:

Спасибо, посмотрю на фитнесс :)

Евгений Степанищев (bolknote.ru) 2009

Комментарий для magicflight.livejournal.com:

Хм… что-то я почитал документацию, истории использования и не воодушевился. Не могли бы вы рассказать чем хороша эта система?

Евгений Степанищев (bolknote.ru) 2009

Комментарий для magicflight.livejournal.com:

А… кажется понял, это ведь функциональные тесты в общем смысле, я так понимаю? Я ведь задачу не описал полностью. Нам бы, в данном случае, тестировать именно GUI.

I LO VE УОИ!!! (bionee.ya.ru) 2009

В Джиру впилен генератор кода для селениума. Если обратиться по спецурлу, то откроется окно с двумя зонами — одна в которой кликаешь, другая в которую генерится код :)

Евгений Степанищев (bolknote.ru) 2009

Комментарий для bionee.ya.ru:

А из чего он генерирует?