如何运行套件中存在的单个/多个测试,即testng.xml

时间:2018-01-19 12:37:12

标签: java testng

testng.xml文件

<test name="Regression 1">
    <parameter name="group" value="regression"></parameter>

     <groups>
        <run>

            <include name = "regression"/>

        </run>
    </groups>
    <packages>
        <package name="com.turvo.tests.regressiontests.regression1.*">
        </package>
    </packages>

</test>
<test name="Regression 2">
    <parameter name="group" value="regression"></parameter>
    <groups>
        <run>

            <include name = "regression"/>

        </run>
    </groups>
    <packages>
        <package name="com.turvo.tests.regressiontests.regression2.*">
        </package>
    </packages>

</test>

我想参数化testng.xml,这样我只能运行回归1测试或回归2测试,或者如果需要,可以通过从命令行传递变量。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

基本上有两种方法可以达到这个目的。

使用Maven surefire插件

要通过Maven surefire插件实现此目的,请将您的surefire插件配置为如下所示。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>${suiteXmlFile}</suiteXmlFile>
        </suiteXmlFiles>
        <properties>
            <property>
                <name>testnames</name>
                <value>${tests}</value>
            </property>
    </configuration>
</plugin>

在pom.xml的<properties>部分中,添加以下属性

<properties>
    <suiteXmlFile>src/test/resources/suite.xml</suiteXmlFile>
    <tests>48341304_Test1</tests>
</properties>

让我们说您的套件xml如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="48341304_Suite" parallel="false" verbose="2">
    <test name="48341304_Test1" verbose="2">
        <classes>
            <class name="com.rationaleemotions.stackoverflow.qn48341304.TestClassOne"/>
        </classes>
    </test>
    <test name="48341304_Test2" verbose="2">
        <classes>
            <class name="com.rationaleemotions.stackoverflow.qn48341304.TestClassTwo"/>
        </classes>
    </test>
</suite>

您现在可以通过maven命令行选择要执行的<test>mvn test -Dtests=48341304_Test2

<强>买者

唯一的问题是,你必须为JVM参数-Dtests强制提供一些值(这就是我为标签<tests>定义默认值的原因之一在<properties>部分。

使用如下所示的beanshell表达式

以下是套件xml文件的外观:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="48341304_Suite" parallel="false" verbose="2">
    <test name="48341304_Test1" verbose="2">
        <method-selectors>
            <method-selector>
                <script language="beanshell">
                    <![CDATA[
                whatTest = System.getProperty("testToRun");
                print(whatTest)
                if (whatTest == null || whatTest.trim().isEmpty()) return true;
                whatTest.contains(testngMethod.getXmlTest().getName());
                ]]>
                </script>
            </method-selector>
        </method-selectors>
        <classes>
            <class name="com.rationaleemotions.stackoverflow.qn48341304.TestClassOne"/>
        </classes>
    </test>
    <test name="48341304_Test2" verbose="2">
        <classes>
            <class name="com.rationaleemotions.stackoverflow.qn48341304.TestClassTwo"/>
        </classes>
    </test>
</suite>

现在您甚至可以通过自己喜欢的IDE运行此套件xml文件,此套件xml文件现在与构建工具无关(它可以与Maven(或)Gradle(或)Ant一起使用)。为了选择需要运行的<test>标记,请通过JVM参数-DtestToRun

传递值

以下是IntelliJ

的运行配置的快照

IntelliJ Run Configuration