从 Maven 运行特定的 TestNG 组

问题描述 投票:0回答:2

我有两组测试用例,如下所述。

@Test(groups="one", dataProvider = "TestData")
public void firstTest(String data){
   //Code
}

@Test(groups="one", dataProvider = "TestData")
public void secondTest(String data){
   //Code
}

@Test(groups="two", dataProvider = "TestData")
public void thirdTest(String data){
   //Code
}

下面是 XML 文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="Test-Automation" parallel="methods" thread-count="2" verbose="1">
    <test name="Suite Test" parallel="methods" thread-count="2" verbose="1">
        <listeners>
             <listener class-name="GroupByInstanceEnabler"></listener>
        </listeners>

        <classes>
            <class name="SampleTest">
                <methods>
                    <include name="firstTest"/>
                    <include name="secondTest"/>
                    <include name="thirdTest"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>

下面是 pom.xml 构建详细信息。

 <build>
        <finalName>Automation</finalName>
        <filters>
            <filter>profiles/${build.profile.id}/config.properties</filter>
        </filters>
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>${basedir}/src/test/resources</directory>
            </resource>
        </resources>

        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20.1</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>${project.basedir}/testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                    <parallel>method</parallel>
                    <threadCount>2</threadCount>
                </configuration>
            </plugin>

        </plugins>
    </build>

我的问题:

使用Maven,如何分别运行组“一”和组“二”。

我尝试了“mvn test -Dgroups=two”,但它仅正常运行(所有测试)。

注意:我使用 2 个不同的配置文件以不同的值运行组“一”两次。这就是您在 pom.xml 文件中看到配置文件配置的原因。

maven testng
2个回答
3
投票

您可以使用 beanshell 表达式来完成此操作。

首先将如下所示的 beanshell 表达式添加到套件 xml 文件中。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false">
    <test name="Test">
        <method-selectors>
            <method-selector>
                <script language="beanshell">
                <![CDATA[whatGroup = System.getProperty("groupToRun");
                groups.containsKey(whatGroup);
                ]]>
                </script>
            </method-selector>
        </method-selectors>
        <classes>
            <class name="organized.chaos.GroupsPlayGround" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

通过这种方式,您可以使用 IDE 中的套件 xml,并且仍然选择要执行的组。如果没有通过 JVM 参数提供任何值,您可以丰富此 beanshell 以默认运行所有内容

-DgroupToRun=one

有关 beanshell 执行的更多信息,请参阅:

  1. TestNG 官方文档这里
  2. 我的博文链接

0
投票

我收到错误 - 未定义参数:whatGroup : at Line: 2 : in file: 内联评估:``whatGroup = System.getProperty("groupToRun");

© www.soinside.com 2019 - 2024. All rights reserved.