Selenium Grid мультибраузерный и мультиплатформенный правильный подход

#java #selenium #testng #selenium-grid #testng.xml

#java #selenium #testng #selenium-grid #testng.xml

Вопрос:

Моя цель — запустить тестовые примеры параллельно с приведенной ниже комбинацией и создать отчет об экстенте для каждой комбинации, всего 8 комбинаций

  1. Windows (Chrome, Firefox, IE)
  2. Linux (Chrome, Firefox)
  3. Mac (Safari, Chrome, Firefox)

Я пришел к этому после поиска по сети. Это <suite> запускает все <test> теги параллельно, и каждый <test> из них представляет комбинацию ОС и браузера, которая снова запускает тестовые классы параллельно. Каждый тестовый класс имеет экземпляр RemoteWebDriver.

  1. Является ли это решение правильным или мне нужно внести какие-либо изменения?
  2. Сложность возрастает, как только тестовые классы начинают увеличиваться, я хочу добавлять / удалять тестовые классы из всех 8 тестовых тегов.
  3. Если я хочу запустить только одну комбинацию (ОС браузер), нужно ли мне иметь другую testng.xml файл и редактирование значений параметров?
  4. Как получить отчет для каждой комбинации. Поскольку все тесты выполняются параллельно и многопоточно, как отслеживать каждый тест?

TestNg.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests">
    <test name="Windows_Chrome" parallel="classes" thread-count="3">
        <parameter name="os" value="windows" />
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="com.mag.SeleniumGrid.Test_001" />
            <class name="com.mag.SeleniumGrid.Test_002" />
            <class name="com.mag.SeleniumGrid.Test_00N" />
            <!--Each class create RemoteWebDriver instance based on parameters-->
        </classes>
    </test>
    <!-- ..... all 8 combinations -->
    
    <test name="Linux_Chrome" parallel="classes" thread-count="3">
        <parameter name="os" value="linux" />
        <parameter name="browser" value="chrome" />
        <classes>
            <class name="com.mag.SeleniumGrid.Test_001" />
            <class name="com.mag.SeleniumGrid.Test_002" />
            <class name="com.mag.SeleniumGrid.Test_00N" />
        </classes>
    </test>
</suite> 
  

Ответ №1:

Не могу сказать, что я использовал этот метод, поэтому прошу прощения, но я использую maven для запуска тестов и обнаружил, что он работает нормально. Вы можете добавить тест в группу, выполнив:

 @Test(groups = {"WindowsChrome", "LinuxChrome"})
public class Test123 {
  

Вы можете запускать тесты с помощью maven, например:

 mvn test -Dgroups=WindowsChrome
  

Если вы хотите запустить это в конвейере, я бы проверил код и клонировал его для каждой среды. В конвейер вы можете добавить файлы .env, которые будет использовать каждая среда, содержащие переменные типа «OS_TYPE» и «BROWSER_TYPE». Теперь вы можете сделать:

 stage('Windows Chrome Tests') {
     steps {
          bat "mvn test -f WindowsChrome/pom.xml -Dgroups=WindowsChrome"
     }
}
stage('Linux Chrome Tests') {
     steps {
          bat "mvn test -f LinuxChrome/pom.xml -Dgroups=LinuxChrome"
     }
}
  

Для того, чтобы журналы имели какой-либо смысл при параллельных тестах, вам необходимо использовать ThreadLocal с Logger, который создаст уникальный экземпляр для каждого потока. Убедитесь, что вы удалили это, когда закончили, или следующий тест с использованием того же потока будет продолжаться с использованием того же экземпляра. Я бы поместил OS / browser в имя файла журнала.

Комментарии:

1. я попробовал аналогичный вашему подход, но не смог увидеть никаких ответов в сети, чтобы получить подтверждение, что все используют grid. То, что я пробовал, создано 1) master salve в jenkins 2) создайте задание конвейера, как вы это делали, которое будет выполняться параллельно во всех 8 комбинациях3) Testng позаботится о параллельном запуске тестового примера в каждой комбинации. Я никогда не использовал grid в этом подходе. Дженкинс позаботится о клонировании проекта в определенную среду и запустит тест локально. После запуска будет заархивирован отчет и журнал для этой комбинации.

2. Извините, так в чем именно проблема?