Selenium Grid - как начать?
#1
Отправлено 27 сентября 2010 - 19:38
Не нашёл на форуме ответов на свои вопросы, и решил начать новую тему.
Начал разбираться с этим тулом и сразу же наткнулся на проблемы:
1. Как нужно изменить тесты Selenium RC для Grid, чтобы запускать их через build файд при помощи ant? (где то видел подобную тему, но когда оказалось нужно, не могу найти её или даже вспомнить где я это видел). Находил похожее для Ruby, но меня интересует применительно к Java коду.
2. Где можно найти описание работы ant применительно к Selenium Grid? Просто передаётся много параметров, пока не совсем понимаю большинство из них :(
3. Обязательно ли использование библиотек TestNG для запуска тестов параллельно, или же достаточно только самого Selenium RC?
4. На ресурсе selenium-grid.seleniumhq.org для проверки правильности настройки Selenium Grid используются несколько демо тестов (например com.thoughtworks.selenium.grid.demo.WebTestForASingleBrowser), но там только откомпилированные классы :( не знаете, где можно найти исходники? Половина вопросов отпала бы автоматически.
Буду признателен за любые советы и ответы.
#2
Отправлено 28 сентября 2010 - 09:27
2. ANT и Selenium Grid никак не связаны между собой. Просто Selenium Grid для сборки и запуска использует ANT, команда запуска "launch-hub". Если интересны внутренности того как она работает, то можно посмотреть файлик GRID_HOME/build.xml.
3. Использование TestNG необязательно, можно взять любую другую запускалку, умеющую запускать тесты параллельно. Сам RC только выполняет уже запущенные тесты параллельно, но запускать их не умеет. Прежде чем использовать TestNG лучше 10 раз подумать, т.к. он кривоват и косоват, можно столкнуться с множеством трудноразрешимых проблем.
4. Исходники примеров есть в GRID_HOME/examples/java-testng/src/com/thoughtworks/selenium/grid/examples/java.
#3
Отправлено 28 сентября 2010 - 10:06
....
3. Использование TestNG необязательно, можно взять любую другую запускалку, умеющую запускать тесты параллельно. Сам RC только выполняет уже запущенные тесты параллельно, но запускать их не умеет. Прежде чем использовать TestNG лучше 10 раз подумать, т.к. он кривоват и косоват, можно столкнуться с множеством трудноразрешимых проблем.
....
Спасибо большое за ответы!
А подскажите альтернативу TestNG, раз уж он кривоват :)
#4
Отправлено 28 сентября 2010 - 11:13
Спасибо большое за ответы!
А подскажите альтернативу TestNG, раз уж он кривоват :)
JUnit
#5
Отправлено 28 сентября 2010 - 11:20
JUnit
Только вот он, насколько знаю, не имеет средств для параллельного запуска тестов. Или уже научился?
#6
Отправлено 28 сентября 2010 - 12:26
JUnit
Только вот он, насколько знаю, не имеет средств для параллельного запуска тестов. Или уже научился?
Сам по себе нет, вы правы.
Но существует библиотечка parallel-junit, правда сам я ее не смотрел, так что конкретно ничего сказать не смогу.
https://parallel-junit.dev.java.net/
#7
Отправлено 28 сентября 2010 - 12:53
Есть два более правильных варианта:
-- использовать нестандартный запускатель ConcurrentJunitRunner : http://www.junit.org/node/589
-- использовать maven для запуска тестов, там есть плагин surefire, который умеет распараллеливать junit-тесты : http://incodewetrust...ently-with.html
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#8
Отправлено 01 октября 2010 - 11:44
Для параллельного выполнения тестов в GRID'е потребуется инициализация одного экземпляра Selenium на каждый класс/метод (в зависимости от метода распараллеливания тестов по классам или методам)
3) Не обязательно, но это весьма простой способ. И по моему личному опыту, работает все вполне сносно (для связки Hudson_CI + Selenium-GRID + TestNG + ANT)
#9
Отправлено 01 октября 2010 - 12:06
По поводу альтернативных "запускалок" тестов - я так понял, что Grid, который описан на их официальном сайте основан на использовании TestNG. А насколько я понял, весь смысл Grid заключается в том, что мы можем запустить hub и несколько remote controls, с которых и будут запускаться нужные тесты. А вот чем именно мы будет "распаралеливать" выполнение тестов (TestNG или другая библиотека или инструмент), это уже всё равно и зависит от наших предпочтений. Я правильно всё понял? Поправьте меня пожалуйста, если я не прав где-то.
Начал пытаться запускать тесты, которые нормально отрабатывают и запускатся из Eclipse, и понял что мне не хватает элементарных знаний того, как запускать их без использования IDE, а просто командами ant - постоянно ему чего-то не хватает или не может найти нужный класс :)
Если не тяжело, подскажите, где можно посмотреть примеры работы Selenium RC + ant?
Спасибо!
#10
Отправлено 01 октября 2010 - 16:24
Роль довольно простая: периодически забирает из SVN'а свежайшую версию проекта авто-тестов, компилирует, а потом ant-командами их запускает, собирает и рассылает результаты на e-mail.
По воводу GRID. GRID-Hub выступает в роли selenium-сервера, получая команды, он определяет ID selenium-сессии и перенаправляет команду в зарезервированный под этот ID Selenium-RC. Диспетчер своего рода.
Искать примеры работу Selenium+ANT надо, отталкиваясь от того, какой тестовый фреймворк собираетесь использовать.
Для TestNG:
http://testng.org/doc/ant.html
Google: selenium+ant+testng
#11
Отправлено 11 октября 2010 - 19:40
Прошу помочь с моими новыми проблемами :)
Не стартуют тесты.
Консоль ругается:
java.lang.RuntimeException: Could not start Selenium session: Failed to start new browser session: Error while launching browser at com.thoughtworks.selenium.DefaultSelenium.start(DefaultSelenium.java:89) ...
Код тестового метода в Selenium RC:
@Test(groups = {"gmailTest"}, description = "Test sends a mail") @Parameters({"seleniumHost", "seleniumPort", "browser", "webSite"}) public void testSendMail(String seleniumHost, int seleniumPort, String browser, String webSite) throws Exception{ startSeleniumSession(seleniumHost, seleniumPort, browser, webSite); session().open("/"); .... }
Запускающая часть из build.xml
... <property name="webSite" value="http://www.gmail.com"/> <property name="seleniumHost" value="localhost"/> <property name="seleniumPort" value="5555"/> <property name="browser" value="*firefox"/> ... <target name="test" description="Run Selenium tests one by one" depends="jar"> <java classpathref="classpath" classname="org.testng.TestNG" failonerror="false"> <sysproperty key="webSite" value="${webSite}" /> <sysproperty key="seleniumHost" value="${seleniumHost}" /> <sysproperty key="seleniumPort" value="${seleniumPort}" /> <sysproperty key="browser" value="${browser}" /> <arg value="-suitename" /> <arg value="GmailSuite" /> <arg value="-d" /> <arg value="${basedir}/target/reports" /> <arg value="-testclass" /> <arg value="com.google.test.GmailProj" /> <arg value="testng.xml" /> </java> </target>
Подскажите, где я облажался и куда копать?
Чувствую, что "Истина где-то рядом" © :) но не могу понять где именно.
#12
Отправлено 12 октября 2010 - 03:35
http://localhost:5555/console
#13
Отправлено 12 октября 2010 - 05:01
Available Remote Controls Host Port Environment localhost 5555 *firefox
Кстати, посмотрел что выдает её консоль:
07:55:12.001 INFO - Command request: getNewBrowserSession[*firefox, http://www.gmail.com, ] on session null 07:55:12.001 INFO - creating new remote session 07:55:12.004 INFO - Allocated session b98d2f39a01b408ca732dcf8b8b4bc50 for http://www.gmail.com, launching... 07:55:12.004 ERROR - Failed to start new browser session, shutdown browser and clear all session data java.lang.RuntimeException: java.io.FileNotFoundException: D:\ (The system cannot find the path specified) at org.openqa.selenium.server.browserlaunchers.FirefoxChromeLauncher.launch(FirefoxChromeLauncher.java:103)
Не совсем понимаю, почему он ругается на диск D. У меня нигде нет никаких обращений к нему.
#14
Отправлено 12 октября 2010 - 06:53
Так, стоп. У тебя Hub и RC на одном порту запущены? Такого быть не может :)Да, одна RC запущена
Available Remote Controls Host Port Environment localhost 5555 *firefox...
При инициализации сессии браузера в коде надо указывать адрес и порт не RC, а Hub'a. По-умолчанию, он на 4444 порте запускается
#15
Отправлено 12 октября 2010 - 07:06
Я Hub на 4444 запускаю, а RC на 5555. Во блин, а я думал, что надо указывать порт RC.
Спасибо большое! Чуть позже попробую.
#16
Отправлено 12 октября 2010 - 20:17
Кстати, java.io.FileNotFoundException выплёвывал всё равно, пока не переписал Selenium Grid на диск C.
Новая порция вопросов :)
Не могу задать порядок выполнения тестов такой, как мне нужен с использованием xml файлика описания suite.
В доке по TestNG указан такой параметр, как preserve-order. Если он равен true, то тесты будут выполнятся в том порядке, какой указан в xml файле.
Но у меня почему то не получается :)
Собственно описание методов:
@Test(groups = {"sendTest"}, description = "Test sends a mail.") @Parameters({"seleniumHost", "seleniumPort", "browser", "webSite"}) public void testSendMail(String seleniumHost, int seleniumPort, String browser, String webSite) throws Exception{ startSeleniumSession(seleniumHost, seleniumPort, browser, webSite); session().open("/"); ... } @Test(groups = {"receiveTest"} description = "Test verifies a mail.") @Parameters({"seleniumHost", "seleniumPort", "browser", "webSite"}) public void testVerifyMail(String seleniumHost, int seleniumPort, String browser, String webSite) throws Exception{ startSeleniumSession(seleniumHost, seleniumPort, browser, webSite); session().open("/"); ... }
Вот кусок моего xml
<test name="gmailTest" preserve-order="true"> <classes> <class name="com.google.test.GmailProj" /> <methods> <include name="testSendMail" /> <include name="testVerifyMail" /> </methods> </classes> </test>
Что надо указывать в качестве name у methods? я уже пробовал и группы по разному обзывать и их указывать. Всё равно выполняет тесты в порядке, обратном тому который мне нужен.
Пока обошёл проблему использованием параметра dependsOnGroups у теста, который должен идти вторым, т.е. получилось:
@Test(groups = {"receiveTest"}, dependsOnGroups ={"sendTest"}
#17
Отправлено 13 октября 2010 - 04:11
http://testng.org/do...pendent-methods
Есть более жесткий способ задания очередности: dependsOnMethods - в этом случае, если тест свалится, то выполнение всех зависимых от него тестов будет пропущено (в отчете они будут отмечены как skipped)
#18
Отправлено 13 октября 2010 - 17:58
Параметр preserve-order работает до уровня классов, а не отдельных методов.Не могу задать порядок выполнения тестов такой, как мне нужен с использованием xml файлика описания suite.
В доке по TestNG указан такой параметр, как preserve-order. Если он равен true, то тесты будут выполнятся в том порядке, какой указан в xml файле.
Но у меня почему то не получается :)
Упорядочить методы можно используя одну из вариаций dependsOn, но не стоит этим злоупотреблять, потому что это жёсткая зависимость -- пытаясь запустить даже один тестовый метод вы потянете за собой рекурсивно всё, от чего у него указаны зависимости.
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#19
Отправлено 13 октября 2010 - 18:28
А параллельно запускаются тоже только методы из разных классов?
#20
Отправлено 13 октября 2010 - 18:47
Нет, с параллельностью всё по-честному :)Да, обидно.
А параллельно запускаются тоже только методы из разных классов?
Но если нужна параллельность -- тогда я ещё более настойчиво не рекомендую делать зависимости с использованием dependsOn!
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных