我试图用Cucumber,用不同的参数并行运行多个testng套件。对于每个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
我正在试图找出我的方法有什么不正确的地方,以及什么是实现这一目标的正确方法。如果这是不可能的,是否有一种方法,我可以在一个套件中拥有多个测试标记(chrome/ff/ie),并从maven命令行为每个测试单独传递测试级别信息。
我怀疑我可能会覆盖-dbrowser=“chrome”中的JVM值,然后被-dbrowser=“Firefox”覆盖。
更多细节
我基本上是在尝试用cucumber并行地进行跨浏览器测试。在这种情况下,我基本上可以在一个套件中有3个测试标记(每个用于chrome、ff、ie),但我关心的是如何从maven命令行中分别传递诸如browser、testinfo(每个测试唯一的)之类的参数。类似-dchrometest.browser=“chrome”和-dfirefoxtest.browser=“Firefox”之类的东西在这里能起作用吗?现在我有3个批处理文件为每个浏览器和调用3个同时。所以3个分离的JVM实例。缺点是cpu利用率总是100%,IE总是失败
你与这个问题链接的博客是我创建的。
回来回答你的问题。如果不加上一些丑陋的黑客,你问的是不可能的。我之所以说这是不可能的,是因为您需要确保套件的数量与作为JVM参数一部分的逗号分隔值相匹配。
假设您的线程计数为2
,并且通过JVM参数传递了两种浏览器类型作为逗号分隔的值,那么解析逻辑仍然无法区分是要检索第一个值还是要检索第二个值。
主套房.java 对于每个测试套件,都有包含@Test的类 例如 TestSuite1.java TestClass1.java 所以我的问题是如何运行TestSuite1、TestSuite2
谢了。
我有一个TestNG XML,格式如下: 这个套件有两个类,每个类都有一些@Test方法。现在我想让我的套件以同样的顺序再运行3次,就像它运行一样,即所有的class1方法,然后是class2方法。我怎样才能做到这一点?我正在使用Selenium WebDriver和核心Java来运行我的自动化套件。
请查看testng.xml并建议 我想运行2个类(下面提到),但面临一些挑战,因为它在下面提到的2个场景下显示了一些不稳定的行为。 这些测试类下的方法具有组和优先级 **目标是使用组运行这些测试 Scenario1:当我使用Threadcount=1时; [test name=“autopracticee”parallel=“classes”thread-count=“1”] 以下是行为: 1.1
我正在尝试在不同的Android设备上并行运行我的自动化套件(使用Selenium WebDrive(Java)TestNG Maven实现)。这是我在xml中的代码: 在TotoTest课上,我有20个测试。它们中的每一个都有注释@Test。当我运行xml时,两个设备并行运行类TotoTest。所以我的设备1(模拟器1)运行20个测试,我的设备2(模拟器2)也运行20个测试。 但是我想要的是,模
请让我知道是否可以通过TestNG运行并行套件?