如何使用 testng.xml 实现多个测试用例的连续执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 testng.xml 实现多个测试用例的连续执行相关的知识,希望对你有一定的参考价值。

参考技术A <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="3" name="Suite" parallel="tests">
<test name="ie">
<classes>
<class name="test.script.Dchrome1"/>
<class name="test.script.Dchrome2"/>
<class name="test.script.Dchrome3"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->本回答被提问者采纳

使用 maven 在 Testng.xml 中动态选择测试用例

【中文标题】使用 maven 在 Testng.xml 中动态选择测试用例【英文标题】:Dynamic selection of testcases on Testng.xml using maven 【发布时间】:2020-01-30 12:18:07 【问题描述】:

我在 testng.xml 文件中定义了一组测试套件,我正在从 pom.xml 文件中传递一个参数来调用 testng 文件

但是我需要一个解决方案,我可以通过一个参数作为环境变量来决定我想从 testng.xml 执行哪个套件

我最初的想法是拥有多个 testng.xml 文件,但拥有多个文件似乎不是最好的解决方案

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Sanity">
        <classes>
            <class name="com.ibm.wce.scbn.cc.runner.Sanity" />
        </classes>
    </test> 
</suite> 
<suite name="Suite">
    <test name="Regression">
        <classes>
            <class name="com.ibm.wce.scbn.cc.runner.Reg" />
        </classes>
    </test> 
</suite> 

Pom.xml

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
                <configuration>
                    <!-- TestNG Suite XML files list for test execution -->
                    <suiteXmlFiles>
                        <suiteXmlFile>$suiteXmlFile</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>

VM 参数:mvn clean install -DsuiteXmlFile=testng.xml,testng2.xml

【问题讨论】:

【参考方案1】:

我认为您正在 maven 中寻找 profiles 。更多信息请关注here

在您的 pom.xml 中,添加 profiles 部分,您的 plugins 进入 &lt;pluginManagement&gt; 内的 build 标记,如下所示

  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>

 <pluginManagement> 


     <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-surefire-plugin</artifactId>
             <version>2.22.1</version>

            <configuration>
                          <suiteXmlFiles>
                          <suiteXmlFile>suite1.xml</suiteXmlFile>
                          </suiteXmlFiles>

            </configuration>
     </plugin>
   </plugins>

 </pluginManagement>  

   <plugins>
         <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         </plugin>

   </plugins>

  </build>



  <profiles> 
        <profile>

            <id>suite1</id>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>

                         <configuration>
                                  <suiteXmlFiles>
                                  <suiteXmlFile>testng-customsuite.xml</suiteXmlFile>
                                  </suiteXmlFiles>

                         </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

         <profile>

            <id>suite2</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>

                         <configuration>
                                  <suiteXmlFiles>
                                  <suiteXmlFile>suite2.xml</suiteXmlFile>
                                  </suiteXmlFiles>

                         </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

<dependencies> 
    ....
 </dependencies>

然后基于profiles,您可以从命令行激活这样的profile,然后执行该配置文件中提到的suite

mvn clean test -P suite2

注意

&lt;pluginManagement&gt; - 定义插件

&lt;plugins&gt; - 激活插件

&lt;profile&gt; - 根据您在命令行中传递的内容运行合适的插件

这些配置文件也可以通过环境变量激活

来自以上链接Supported variables are system properties like $user.home and environment variables like $env.HOME

编辑: 看看this,这似乎表明您尝试做的事情可能是不可能的,但您可以尝试第二种解决方案。这就是我从官方网站复制粘贴的上述文字时的意思。

【讨论】:

感谢您的信息。上述方法需要多个testng xml文件。但是我的要求是我在 testng.xml 中定义了套件 1、2、3、4。在运行时我想选择套件 1 或 2 或同时选择两者 定义单独的 xml 文件有什么问题?您仍然可以从一个主套件文件运行这些套件

以上是关于如何使用 testng.xml 实现多个测试用例的连续执行的主要内容,如果未能解决你的问题,请参考以下文章

testNG之并发执行用例

Java盲点攻克「TestNG专题」摒弃JUnit单元测试,带你学会使用TestNG测试框架(上篇)

详解testng.xml

testng.xml文件的配置

testng.xml 执行多个测试用例

testNG 多线程测试(xml文件实现)