Функциональное тестирование и 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», но я не вижу преимуществ перед «Селениумом», зато вижу недостатки, например, усложнённый (по сравнению с «Селениумом») язык описания тестов.
Я в данный момент учусь в Чехии на MFF Карлова Университета: здесь Селениум проходят в качестве одной из лабораторных работ.
Комментарий для rembish.livejournal.com:
Ничего ж себе. А не расскажешь, вкратце, что такое Selenium RC, как запускать тесты на нескольких браузерах одновременно и что можно делать на всех этих языках, что поддерживает «Селениум» (я так понимаю, можно писать тесты на средах, родных для этих языках и как-то запускать их в браузерах?)
мы используем селениум вместе с фитнессом ( http://fitnesse.org/ ). В результате получается что то типа таких предложений:
When User Click on button with id «id»
Then value of order field should be «value»
И такие тесты легко писать тестерам даже вместо тест кейсов
Комментарий для magicflight.livejournal.com:
Спасибо, посмотрю на фитнесс :)
Комментарий для magicflight.livejournal.com:
Хм… что-то я почитал документацию, истории использования и не воодушевился. Не могли бы вы рассказать чем хороша эта система?
Комментарий для magicflight.livejournal.com:
А… кажется понял, это ведь функциональные тесты в общем смысле, я так понимаю? Я ведь задачу не описал полностью. Нам бы, в данном случае, тестировать именно GUI.
В Джиру впилен генератор кода для селениума. Если обратиться по спецурлу, то откроется окно с двумя зонами — одна в которой кликаешь, другая в которую генерится код :)
Комментарий для bionee.ya.ru:
А из чего он генерирует?