在pom.xml中配置两次Maven插件

时间:2017-10-17 10:47:13

标签: java maven cucumber testng maven-surefire-plugin

我正在开发一个大型Maven Java项目,该项目包含TestNG个自动化测试套件以及Cucumber个自动化测试套件。我意识到这并不理想,但不同的测试套件是由不同的子团队在项目的不同阶段编写的。展望未来,我们打算将这个项目分成更小的项目,但现在我们仍然坚持这种组合。

surefire插件可用于从Maven运行这些测试,但需要为pom.xml中的每个插件配置不同的插件。

对于Cucumber,我们将其与cucumber-jvm-parallel-plugin结合使用,并且配置如下:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.20.1</version>
            <configuration>
                <forkCount>${threads}</forkCount>
                <reuseForks>true</reuseForks>
                <includes>
                    <include>**/Parallel*IT.class</include>
                </includes>
            </configuration>
        </plugin>

对于我们的TestNG测试,它的配置如下:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.20.1</version>
            <configuration>
                <suiteXmlFiles>${file}</suiteXmlFiles>
                <skipTests>false</skipTests>
                <properties>
                    <property>
                        <name>suitethreadpoolsize</name>
                        <value>${threads}</value>
                    </property>
                </properties>
            </configuration>
        </plugin>

我们不是Maven专家,所以,目前,我们只是注释掉我们不想用于我们正在运行的套件的插件版本。显然这很麻烦,而不是最佳实践,所以我非常感谢有关如何解决这个问题的任何建议。我们可以在pom.xml中合法地定义插件两次,并以某种方式传递一个标志来指示应该运行哪个版本?非常感谢您阅读我的问题。

2 个答案:

答案 0 :(得分:1)

使用maven profiles选择正确的配置:

添加此代码段:

<profiles>
    <profile>
        <id>Cucumber</id>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <forkCount>${threads}</forkCount>
                    <reuseForks>true</reuseForks>
                    <includes>
                        <include>**/Parallel*IT.class</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </profile>
    <profile>
        <id>TestNG</id>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <suiteXmlFiles>${file}</suiteXmlFiles>
                    <properties>
                        <property>
                            <name>suitethreadpoolsize</name>
                            <value>${threads}</value>
                        </property>
                    </properties>
                </configuration>
            </plugin>
        </plugins>
    </profile>
</profiles>

并更改此

<plugins>
  <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.20.1</version>
    </plugin>
   <!-- delete on of the entries -->
</plugins>

您必须在命令行中指定所需的配置文件:

   mvn test -P Cucumber
   mvn test -P TestNG 

位你也可以同时运行:

mvn test -P Cucumber -P TestNG 
mvn test -P Cucumber,TestNG 

答案 1 :(得分:1)

为要运行的每组测试创建下游maven项目。提前做更多的工作,但它很快得到回报。