Распараллеливание Thucydides тестов с помощью Selenium Grid


(s.kaliberda) #1

Всем привет!

У нас на проекте планируется использовать Thucydides фреймворк. Одно из требований - распараллеливание тестов.

Там есть вариант распараллеливания с помощью parallel batches, но хотелось попробовать именно с помощью selenium grid.

С версии 0.8.26 появилась возможность использования RemoteWebDriver.

Возможно ли через RemoteWebDriver послать тесты на selenium grid hub и таким образом их распараллелить?

Может быть у кого-то есть умные мысли по этому поводу или же может быть кто-то уже применил этот вариант распараллеливания.

Буду благодарен за любые коментарии


(Mykhailo Poliarush) #2

стоп, надо понимать где происходить параллелизация

что означает параллелизация на selenium grid

селениум грид только перенаправляет запросы на разные ноды и получает с них ответы

параллелизация должна проходить на уровне самих тестов

 

я конечно Thucydides и selenium grid не запускал но все должно быть где-то так

1. запускаете хаб и ноды для запуска ваших тестов с соответствующей конфигурацией, которая вам необходима

2. дальше в тестах указываете хост и порт хаба через, который будут идти ваши тесты (ну и конечно вы должны использовать RemoteWebDriver)

3. и дальше запускаете Thucydides с parallel batches

 

Расскажите, что у вас получилось.


(s.kaliberda) #3

Спасибо! Попробую сделать на выходных. Потом отпишусь.


Запуск авто-тестов из исполняемого файла (.bat или .exe)
(s.kaliberda) #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
 
И несколько нодов на разных портах
java -jar selenium-server-standalone-2.25.0.jar -role node -hub http://hubip:4444/grid/register -port 5556

Запускаем наши тесты:

mvn clean verify -Dwebdriver.remote.url=http://hubip:4444/wd/hub

Как видим, запуск через RemoteWebDriver происходит всего лишь с помощью установки системной проперти webdriver.remote.url. Запускать parallel batches не нужно, без них тоже все работает отлично.


(Mykhailo Poliarush) #5

отлично получилось :)


(Sergey Korol) #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. Есть идеи, почему такое может происходить?


(Sergey Korol) #7

С проблемой запуска в Firefox разобрался. Проблема решается заданием системной переменной в pom.xml:

<webdriver.driver>${driver}</webdriver.driver>

Другой вопрос, почему игнорится аннотация @WithDriver для грида? И как в таком случае заставить тесты запускаться в различных браузерах?

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


Аннотация @WithDriver ("firefox") не работает с Grid