有没有办法在testng.xml并行运行两个.xml文件?

时间:2014-11-07 21:26:01

标签: java testng saucelabs

我目前有两种不同配置的TestSuite(SUITE1.XML和SUITE2.xml)(例如浏览器,Os)......

我将testng.xml中的两个SUIT调用在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

我搜索过很多网页,而且我得到的答案大部分都是使用我可以实现的ANT {PARALLEL}任务,但是如何?我需要一个例子..请帮助。

我正在使用macOS& TESTNG 6.8.6

3 个答案:

答案 0 :(得分:6)

另一种选择是使用套件套件。我之前已经说过,因为我已经使用过这个设置,但我希望你能在这里找到足够的细节,至少可以开始。

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

<suite name="Suite1">
    <test name="test1">
        <classes>
            <class name="fully.qualified.ClassName" />
        </classes>
        <methods>
            <include name="method1" />
        </methods>
    </test>
</suite>

和...

<suite name="Suite2">
    <test name="test2">
        <classes>
            <class name="fully.qualified.ClassName" />
        </classes>
        <methods>
            <include name="method2" />
        </methods>
    </test>
</suite>

然后,您将定义套件套件XML文件:

<suite name="suite of suites">
    <suite-files>
        <suite-file path="Suite1.xml" />
        <suite-file path="Suite2.xml" />
    </suite-files>
</suite>

请注意,suite-file路径值是从当前套件XML文件到您正在调用的XML文件的相对路径。如果他们在同一个目录中,只需文件名即可。

此外,两种XML类型都支持<parameter>标记。标准套件XML将在<suite><test>级别读取,并且我发现套件上的<parameter><suite>标签-suites XML文件也可以。

最后,在执行时,您只需要传递套件套件XML文件作为套件文件参数。

编辑: 这是我如何使我的两个套房并行运行的方式。诀窍是正确设置我的main()方法。

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

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

这产生了我在Selenium Grid上并行运行的两个suite.xml文件。

说实话,可能有更好的方法。当我尝试做类似的事情时,这正是对我有用的。

答案 1 :(得分:2)

你不需要并行运行套装....相反,你可以在单个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>

答案 2 :(得分:0)

是的,您可以使用&#34; suitethreadpoolsize&#34; testng的属性

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

有关详细信息,请参阅testng的官方网站 http://testng.org/doc/documentation-main.html#parallel-running

谢谢!