skaliberda
(s.kaliberda)
23.Ноябрь.2012 10:25:03
#1
Всем привет!
У нас на проекте планируется использовать Thucydides фреймворк. Одно из требований - распараллеливание тестов.
Там есть вариант распараллеливания с помощью parallel batches, но хотелось попробовать именно с помощью selenium grid.
С версии 0.8.26 появилась возможность использования RemoteWebDriver.
Возможно ли через RemoteWebDriver послать тесты на selenium grid hub и таким образом их распараллелить?
Может быть у кого-то есть умные мысли по этому поводу или же может быть кто-то уже применил этот вариант распараллеливания.
Буду благодарен за любые коментарии
polusok
(Mykhailo Poliarush)
23.Ноябрь.2012 13:21:00
#2
стоп, надо понимать где происходить параллелизация
что означает параллелизация на selenium grid
селениум грид только перенаправляет запросы на разные ноды и получает с них ответы
параллелизация должна проходить на уровне самих тестов
я конечно Thucydides и selenium grid не запускал но все должно быть где-то так
1. запускаете хаб и ноды для запуска ваших тестов с соответствующей конфигурацией, которая вам необходима
2. дальше в тестах указываете хост и порт хаба через, который будут идти ваши тесты (ну и конечно вы должны использовать RemoteWebDriver)
3. и дальше запускаете Thucydides с parallel batches
Расскажите, что у вас получилось.
skaliberda
(s.kaliberda)
23.Ноябрь.2012 13:34:54
#3
Спасибо! Попробую сделать на выходных. Потом отпишусь.
skaliberda
(s.kaliberda)
26.Ноябрь.2012 08:54:22
#4
Как не странно это прозвучит, но мне понадобилось всего лишь 3 часа для того чтобы сделать примитивную систему распараллеливания тестов.
Во первых нужно распаралелить тесты с помощью junit(версия выше 4.7)
Кусок pom.xml, в котором распараллеваем тесты:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<includes>
<include>**/*Story.java</include>
</includes>
<parallel>classes</parallel>
<threadCount>5</threadCount>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Важно! Распаралелвать нужно классы, когда пытался распараллелить методы, вываливался эксепшин.
Дальше запускаем Selenium Grid:
java -jar selenium-server.jar -role hub
И несколько нодов на разных портах
Запускаем наши тесты:
mvn clean verify -Dwebdriver.remote.url= http://hubip:4444/wd/hub
Как видим, запуск через RemoteWebDriver происходит всего лишь с помощью установки системной проперти webdriver.remote.url. Запускать parallel batches не нужно, без них тоже все работает отлично.
ArtOfLife
(Sergey Korol)
02.Январь.2013 14:09:05
#6
А можно пример самого теста?
Я вот все борюсь с распараллеливанием под разные браузеры. Локально получается, а через грид - нет.
Вот кусок из pom.xml для локального распараллеливания:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.11</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<parallel>classes</parallel>
<threadCount>8</threadCount>
<systemPropertyVariables>
<webdriver.chrome.driver>${chrome.driver}</webdriver.chrome.driver>
<webdriver.ie.driver>${ie.driver}</webdriver.ie.driver>
<chrome.binary>${chrome.binary}</chrome.binary>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Вот пример теста:
@RunWith(ThucydidesRunner.class)
public class GoogleSearchTest {
@Managed
public WebDriver webdriver;
@ManagedPages(defaultUrl = "http://www.google.ru/")
public Pages pages;
@Steps
public GoogleUserSteps userSteps;
@Test
@WithDriver("chrome")
public void first_test() {
userSteps.is_on_the_home_page();
userSteps.enters("Selenium", true);
userSteps.should_see_search_results_containing_word("Selenium");
}
}
Существует еще 2 аналогичных класса, но для самих тестов используются аннотации @WithDriver("firefox") и @WithDriver("iexplorer"). Локально этот вариант работает отлично.
Как только пытаюсь подключить грид:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.11</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<parallel>classes</parallel>
<threadCount>8</threadCount>
<systemPropertyVariables>
<webdriver.remote.url>${remote.url}</webdriver.remote.url>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
3 теста то запускаются удаленно, но последовательно и только в Firefox. Есть идеи, почему такое может происходить?
ArtOfLife
(Sergey Korol)
02.Январь.2013 14:33:09
#7
С проблемой запуска в Firefox разобрался. Проблема решается заданием системной переменной в pom.xml:
<webdriver.driver>${driver}</webdriver.driver>
Другой вопрос, почему игнорится аннотация @WithDriver для грида? И как в таком случае заставить тесты запускаться в различных браузерах?
Ну и по-прежнему актуален второй вопрос: почему через грид тесты все еще запускаются последовательно?