使用Maven,TestNG - 如何在TestNG中运行特定组。想知道,如果我正在做什么甚至是可行的?

时间:2017-01-31 22:39:53

标签: maven jvm testng pom.xml

这就是我的POM.xml的样子。

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.github.akiraly.reusable-poms</groupId>
        <artifactId>pom-parent-with-spring-context</artifactId>
        <version>4</version>
    </parent>
    <groupId>MvnTestFramework</groupId>
    <artifactId>MvnTestFrameworkProject</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.6</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <forkMode>always</forkMode>
                    <systemProperties>
                        <property>
                            <name>reporter.debug</name>
                            <value>false</value>
                        </property>
                    </systemProperties>
                    <suiteXmlFiles>
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                    <reportsDirectory>reports</reportsDirectory>
                    <parallel>methods</parallel> 
                    <threadCount>5</threadCount>
                    <skipTests>false</skipTests>
                    <suitename>${testng.suitename}</suitename>
                    <groups>${testng.groups}</groups>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <encoding>utf8</encoding>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>                            
            </plugin>
        </plugins>
    </build>
</project>

这就是我的testng.xml的样子:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="testgroups" verbose="1" parallel="tests" group-by-instances="true" preserve-order="false" thread-count="5">
<test name="testgroups" preserve-order="true" group-by-instances="true">
            <groups>
                <run>
                    <include name="group1" />
                    <include name="group2" />
                    <include name="group3" />
                </run>
            </groups>
            <packages>
                <package name="testpackage.*" />
            </packages>
        </test>
    </suite>

我想要的是:只运行特定的测试组。意思是group1,group2或group3,但不是所有这些都可以一次运行。 出于同样的原因,我提供了{testng.groups}来运行特定组。 在我运行testng.xml的JVM参数中,我指定: -Dtestng.groups = group2仅运行group2测试。但是,它只运行group1,group2和group3中的所有测试。

我是否正确接近了这个问题?如何确保只运行一组特定的组。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您可以尝试利用TestNG提供的Beanshell功能来完成此任务。

这样,不管你如何运行测试套件:

  • 通过您的IDE使用TestNG插件,其中您的pom文件没有相关性(或)
  • 通过maven,其中maven具有相关性

您的套件文件的方法选择器将永远受到尊重。

简而言之,您需要定义一个使用Beanshell的方法选择器,如下所示

<?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 -->

一旦有了这样的套件xml文件,就可以通过JVM参数-DwhatGroup指定组名。

如果没有通过JVM参数找到任何组,你也可以选择运行所有内容来为beanshell脚本增添趣味。

有关详细信息,请参阅my blog post以全面了解如何使用beanshell。