Запуск нескольких тестовых наборов параллельно с различными параметрами для каждого из этих наборов - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь запустить несколько комплектов testng параллельно с разными параметрами с помощью cucumber. С каждым комплектом tesng я пытаюсь передать разные браузеры, testinfo и т. Д. Я хотел бы добиться этого с помощью параметров командной строки maven. Я следовал за постом в https://rationaleemotions.wordpress.com/2016/03/29/parallel-execution-of-multiple-testng-suites/#comment-1723. Что я хотел бы сделать, это запустить наборы параллельно с другим набором параметров JVM.

Я попробовал следующий способ, чтобы добиться того же, и он просто запускает один браузер Firefox для выполнения тестов и полностью игнорирует браузер Chrome (даже не запускается последовательно)

mvn verify  -Dcucumber.options="--tags @123" -DGrid="false" -Dbrowser="chrome" 
-Durl="https://abc.xyz.com" -Dtestinfo="R3.0-Regression-chrome" -DNewuser="123test1"  
-DsuiteXmlFile=Chrometestng.xml,-Dcucumber.options="--tags @123" -DGrid="false" 
-Dbrowser="firefox" -Durl="https://abc.xyz.com" -Dtestinfo="R3.0-Regression-FF" 
-DNewuser="123test2" -DsuiteXmlFile=FFtestng.xml  -Dthreads=2

Мой уверенный огонь как ниже

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
    <testFailureIgnore>true</testFailureIgnore>
    <suiteXmlFiles>
        <suiteXmlFile>${suiteXmlFile}</suiteXmlFile>
    </suiteXmlFiles>
    <skipTests>false</skipTests>
    <properties>
        <property>
            <name>suitethreadpoolsize</name>
            <value>${threads}</value>
        </property>
    </properties>
</configuration>

Мой тест такой, как показано ниже

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.2</version>
<scope>test</scope>

Мои chrometestng.xml и Chrometestrunner, как показано ниже (FFtestng.xml и FFrunner аналогичны chrome, за исключением изменения имени комплекта / теста)

<suite name="ChromeSuite" parallel="false">
<test name="ChromeTest">
    <classes>
        <class name="abc.runner.ChromeTestRunner"></class>
    </classes>
</test> <!-- Test -->

  @RunWith(ExtendedCucumber.class)
  @ExtendedCucumberOptions(
    jsonReport = "target/cucumber.json",
    detailedReport = true,
    jsonUsageReport = "target/cucumber-usage.json",
    toPDF = true,
    excludeCoverageTags = {"@flaky" },
    includeCoverageTags = {"@passed" },
    reportPrefix = "abc_Report",
   outputFolder = "abc_Reports/PDFReports/${testinfo}/DATE(yyyy-MM-dd-HH-mm-SS)/")
@CucumberOptions(plugin = { /*"html:target/cucumber-html-report",*/
    "json:target/cucumber.json"/*, "pretty:target/cucumber-pretty.txt",
    "usage:target/cucumber-usage.json", "junit:target/cucumber-results.xml"*/ },
    features={"src/test/resources/featurefiles"},strict = false, dryRun=false,
    glue = {"abc_stepdefinitions"},
    tags = {"@123"})
@Test
public class ChromeTestRunner extends ExtendedTestNGRunner {    
}

когда я попробую это

mvn verify DsuiteXmlFile=Chrometestng.xml,FFtestng.xml -Dthreads=2

Alteast запускает два браузера Chrome параллельно.

Я пытаюсь выяснить, что неверно в моем подходе и как правильно сделать это. Если это невозможно, могу ли я иметь несколько тестовых тегов (chrome / ff / ie) в одном наборе и передавать информацию об уровне тестирования отдельно для каждого из этих тестов из командной строки maven.

Я сомневаюсь, что я могу перезаписывать значения JVM как -Dbrowser = "chrome", перезаписывается -Dbrowser = "firefox"

Подробнее

Я в основном пытаюсь провести кросс-браузерное тестирование с огурцом параллельно. В этом случае я могу, по сути, иметь 3 тестовых тега в одном наборе (каждый для chrome, ff, т.е.), но меня беспокоит то, как передать параметры, такие как браузер , testinfo (уникальная для каждого теста) отдельно от командной строки maven. Здесь будет работать что-то вроде -Dchrometest.browser = "chrome" и -Dfirefoxtest.browser = "firefox". Прямо сейчас у меня есть 3 пакетных файла для каждого браузера и запускает 3 одновременных. Таким образом, 3 отдельных экземпляра JVM. Недостатком является то, что загрузка ЦП всегда составляет 100%, а IE неизменно дает сбой

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я бы предложил сделать это с помощью виртуальных машин. Используйте разные виртуальные машины для каждого отдельного набора параметров jvm. Это должно упростить вещи, так как каждый набор функций будет изолирован

0 голосов
/ 06 января 2019

Блог, который вы связали с этим вопросом, был создан мной.

Возвращаясь к ответу на ваш вопрос. То, что вы спрашиваете, отчасти невозможно без каких-либо уродливых хаков. Причина, по которой я сказал, что это невозможно, заключается в том, что вам нужно убедиться, что количество наборов совпадает со значениями через запятую, которые являются частью аргумента JVM.

Итак, допустим, что ваш счетчик потоков был 2, и вы передали два варианта браузера как значения, разделенные запятыми через аргумент JVM, логика синтаксического анализа все равно не сможет различить, нужно ли получить первое значение или если второе значение должно быть получено.

Один из подходов, который вы могли бы сделать, описан ниже:

  1. Определите класс, который синхронизируется и является одиночным.
  2. Этот класс при вызове будет в основном способен анализировать аргумент JVM (варианты браузера, которые передаются в данном случае) и возвращать обратно одно значение браузера для каждого вызова. Поэтому, если он будет вызван дважды, он попытается вернуть два значения из проанализированного аргумента JVM (который является значениями, разделенными запятыми).
  3. Теперь в вашем наборе вы просто запросите этот новый одноэлементный класс. Таким образом, каждый запрос вернул бы уникальный вкус браузера.
...