6

我需要并行运行多个测试套件。其中一种方法是创建一个套件文件,如下所示 -

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

<suite name="AllTests" verbose="8">
    <suite-files>
    <suite-file path="./Suite1.xml"></suite-file>
    <suite-file path="./Suite2.xml"></suite-file>
</suite-files>
</suite>

创建一个类如下 -

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import org.testng.xml.Parser;
import org.testng.xml.XmlSuite;
import org.testng.TestNG;
import org.xml.sax.SAXException;

public class RunSuitesInParallel{

    public static void main(String[] args) throws FileNotFoundException, ParserConfigurationException, SAXException, IOException {
        TestNG testng = new TestNG(); 
        testng.setXmlSuites((List <XmlSuite>)(new Parser("src"+File.separator+"test"+File.separator+"resources"+File.separator+"xml_Suites"+File.separator+"AllTests.xml").parse()));       
        testng.setSuiteThreadPoolSize(2);
        testng.run();
    }
}

当我从 Eclipse IDE 运行它时,我能够实现上述目标。如何从 Maven 命令行运行它?

POM.xml 的片段 -

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.14.1</version>
    <configuration>
        <include>com/shn/test/*Tests.class</include>
        <suiteXmlFiles>
            <!-- <suiteXmlFile>src/test/resources/TestNG.xml</suiteXmlFile> -->
            <suiteXmlFile>${tests}</suiteXmlFile>
        </suiteXmlFiles>
        <testFailureIgnore>true</testFailureIgnore>
    </configuration>
</plugin>

目前执行我使用的任何给定 XML -

mvn -Dtests=AllTests.xml test
4

4 回答 4

1

并行运行测试的最简单解决方案是使用maven-surefire-plugin的配置,如下所示:

</plugins>
    [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.15</version>
        <configuration>
          <parallel>methods</parallel>
          <threadCount>10</threadCount>
        </configuration>
      </plugin>
    [...]
</plugins>

通常您不需要单独的 testng.xml 文件来运行测试,因为它们将根据测试的命名约定默认运行。此外,除了您给定的定义错误之外,不需要单独制定包含规则。

您可以通过 groups 参数控制哪些测试将与 TestNG 相关联运行,如下所示:

mvn -Dgroups=Group1 test

此外,可以通过如下test属性控制哪些测试将运行:

mvn -Dtest=MyTest test

或者

mvn -Dtest=MyTest,FirstTest,SecondTest test

从命令行指定测试的更精细的方法如下:

mvn -Dtest=MyTest#myMethod test

它运行myMethodMyTest 类中的方法。

于 2013-07-03T15:49:48.323 回答
0

这对我有用:

  1. 转到您拥有 pom 文件的目录。
  2. 然后输入:a)mvn test -U -Pselenium-tests(如果你想运行测试)b)mvn clean install -Pselenium-tests(如果你想构建和运行测试)

这将运行您在 pom 中指定的测试套件(xml 文件):

<suiteXmlFiles>
    <!-- <suiteXmlFile>src/test/resources/TestNG.xml</suiteXmlFile> -->
    <suiteXmlFile>${tests}</suiteXmlFile>
</suiteXmlFiles>
于 2014-01-02T19:19:17.190 回答
0

您可以使用通配符来匹配大集合。

mvn -Dtest=TestSquare,TestCi*le test

Surefire 插件

于 2019-04-16T02:37:06.110 回答
0

要使用 maven 运行您的RunSuitesInParallel类,您需要使用该exec 插件,因为它是一个带有 main 方法的 java 类:

mvn exec:java -Dexec.mainClass="your.package.RunSuitesInParallel"

如果我在你的位置,我会将 2 更改testng.setSuiteThreadPoolSize(2);args[0]并使用-Dexec.args="2"

于 2016-11-15T11:23:28.537 回答