Java 有没有可能在testng.xml中并行运行两个.xml文件?

Java 有没有可能在testng.xml中并行运行两个.xml文件?,java,testng,saucelabs,Java,Testng,Saucelabs,我目前有两个不同的测试套件(SUITE1.XML和SUITE2.XML),它们具有不同的配置(例如浏览器、操作系统) 我调用testng.xml中的两个套件在saucelabs上运行。。。而且运行良好。。。我唯一关心的是,我希望这些套件并行运行,而不是顺序运行 我得到的输出是 [TestNG] Running: /Users/muzamilabbasi/Automation/BaublebarTest/Suite1.xml This is Browser String FIREFOX Th

我目前有两个不同的测试套件(SUITE1.XML和SUITE2.XML),它们具有不同的配置(例如浏览器、操作系统)

我调用testng.xml中的两个套件在saucelabs上运行。。。而且运行良好。。。我唯一关心的是,我希望这些套件并行运行,而不是顺序运行

我得到的输出是

[TestNG] Running: /Users/muzamilabbasi/Automation/BaublebarTest/Suite1.xml This is Browser String FIREFOX This is Platform String WIN8 This is Version String 25 This is Browser String FIREFOX This is Platform String WIN8 This is Version String 25 log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). log4j:WARN Please initialize the log4j system properly. log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). log4j:WARN Please initialize the log4j system properly. Page Title isGoogle Page Title isGoogle =============================================== mysuite1 Total tests run: 2, Failures: 0, Skips: 0 =============================================== [TestNG] Running: /Users/muzamilabbasi/Automation/BaublebarTest/Suite2.xml This is Browser String FIREFOX This is Platform String XP This is Version String 7 This is Browser String FIREFOX This is Platform String XP This is Version String 7 Page Title isGoogle Page Title isGoogle [TestNG]正在运行: /Users/muzamilabbasi/Automation/BaublebarTest/Suite1.xml 这是浏览器字符串FIREFOX 这是平台字符串WIN8 这是版本字符串25 这是浏览器字符串FIREFOX 这是平台字符串WIN8 这是版本字符串25 log4j:WARN找不到记录器(org.apache.http.client.protocol.RequestAddCookies)的追加器。 log4j:警告请正确初始化log4j系统。 log4j:WARN找不到记录器(org.apache.http.client.protocol.RequestAddCookies)的追加器。 log4j:警告请正确初始化log4j系统。 页面标题是谷歌 页面标题是谷歌 =============================================== 我的套件1 运行的测试总数:2,失败:0,跳过:0 =============================================== [TestNG]正在运行: /Users/muzamilabbasi/Automation/BaublebarTest/Suite2.xml 这是浏览器字符串FIREFOX 这是平台字符串XP 这是版本字符串7 这是浏览器字符串FIREFOX 这是平台字符串XP 这是版本字符串7 页面标题是谷歌 页面标题是谷歌 我在网上搜索了很多,我得到的答案大多是使用ANT{PARALLEL}任务,我可以完成,但如何实现呢?我需要一个例子。。请帮忙


我使用的是macOS&TESTNG 6.8.6

您不需要并行运行套装……相反,您可以在单个TESTNG.xml套装中编写两个测试,并并行运行它

如果您想为不同的测试(浏览器/操作系统等)使用两种不同的配置,请将其作为testng.xml中的一个参数,并使用selenium网格将每个线程重定向到相应的节点

请看下面的例子

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Test Suit" verbose="2" parallel="tests">

<test name="Regression Test">
    <parameter name="browser" value="firefox" />
    <parameter name="os" value="win7" />
    <classes>
        <class name="pakagename.classname" />
    </classes>
</test>

<test name="Smoke Test">
    <parameter name="browser" value="chrome" />
    <parameter name="os" value="mac" />
    <classes>
        <class name="pakagename.classname" />
    </classes>
</test>

您还可以使用ANT或MAVEN运行两个testng.xml套件。但我更喜欢第一个。请在MAVEN项目的pom.xml中添加以下部分

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng1.xml</suiteXmlFile>
                    <suiteXmlFile>testng2.xml</suiteXmlFile>
                </suiteXmlFiles>
                <reportsDirectory>${basedir}/src/test/java/</reportsDirectory>
             <testFailureIgnore>true</testFailureIgnore>
            </configuration>
        </plugin>
      <plugins>
<build>

src
org.apache.maven.plugins
maven surefire插件
2.17
testng1.xml
testng2.xml
${basedir}/src/test/java/
真的

另一种选择是使用一套套件。在开始之前,我会说我已经有一段时间没有使用这个设置了,但希望您能在这里找到足够的细节,至少可以开始使用

首先,您需要定义两个(或更多)套件XML文件:

<suite name="Suite1">
    <test name="test1">
        <classes>
            <class name="fully.qualified.ClassName" />
        </classes>
        <methods>
            <include name="method1" />
        </methods>
    </test>
</suite>
然后,在命令行上:

java -jar ParallelSuiteDemo.jar SuiteOfSuites.xml
注意,我的jar和所有xml文件都与此配置位于同一目录中。如果希望使用目录结构,则需要正确配置命令行参数和

这产生了我的两个suite.xml文件,它们在Selenium网格上并行运行


老实说,也许有更好的方法可以做到这一点。这正是我在尝试做类似事情时所做的

是的,您可以使用testng的“suitethreadpoolsize”属性来实现这一点

<suite-files suitethreadpoolsize="2">
    <suite-file path="suite1.xml" />
    <suite-file path="suite2.xml" />
</suite-files>

有关更多详细信息,请参阅testng的官方网站


谢谢

嗨,Tim,我实际上尝试了主/从套件的这种配置,但问题是,我正在使用sauce labs执行测试,所以假设我调用了套件(SUITE1.xml有20个测试用例,SUite2.xml有20个测试用例),这两种配置都不同,我在我的MasterSUite.xml中调用了它们,我不明白的是,它首先运行SUITE1.xml,在完成SUITE1.xml之后,它运行SUITE2.xml。。。。我希望两者(SUITE1.xml和SUITE2.xml)同时运行我明白你的意思。我需要通过一些旧代码来找到细节,但我确实在您描述希望看到的内容时使用了这些代码。不过,唯一的区别是,我在一个内部网格上运行,而不是在沙司上运行。。。虽然我认为Sauce可以处理这类事情,因为配置都在代码中。我需要几天的时间,但我会让这一切恢复正常,并发布我的发现,希望你能尝试同样的调味汁,并得到想要的结果。我似乎记得在某个地方有一个模糊的设置。我更新了我的答案,加入了一些新的信息,如果你希望采用这种方法,你可能会觉得有用。有了新的配置,我可以在自己的网格上并行运行两个套件。可能有其他/更好的方法来实现这一点,而不是我上面添加的。。。这正是我在处理套件文件时为be back所做的工作。希望这至少能让您开始,并且您可以在您认为合适的地方进行改进。命令应该是:
java-jar TestRunner.jar SuiteOfSuites.xml
Bharat我没有尝试过,我正在避免使用maven,因为我们有ANT,所以我会看看我是否可以在某个地方适应ANT,如果你能帮忙,我会很感激的。@Muzamil:我没有在ANT工作过。您可以尝试“tim slifer”解决方案,从ANT调用它。要使用主xml并行运行从属xml,请在主xml中添加“”。再一次,我不确定这是否符合您的目的,只是一个提示。谢谢Bharat,我一定会尝试一下。您能详细说明一下您到底是如何使用上述xml标记的吗?获取错误“必须为元素类型“suite-files”声明属性“suitethreadpoolsize”,并且不允许运行。
public class TestRunner
{
    public static void main(String[] args)
    {
        TestNG testng = new TestNG();
        TestListenerAdapter adapter = new TestListenerAdapter();
        List<String> suites = new ArrayList<String>();

        testng.addListener(adapter);
        suites.add(args[0]);
        testng.setTestSuites(suites);
        testng.setParallel("parallel");
        testng.setSuiteThreadPoolSize(5);
        testng.setOutputDirectory("path to output");
        testng.run();
    }
}
java -jar ParallelSuiteDemo.jar SuiteOfSuites.xml
<suite-files suitethreadpoolsize="2">
    <suite-file path="suite1.xml" />
    <suite-file path="suite2.xml" />
</suite-files>