最终,我为每个测试使用JUnit4 @Category运行了自动化测试;它们被标记为PriorityHighPriorityMediumPriorityLow

在我的pom.xml中,我分别设置为个人资料:

<profile>
    <id>PriorityHigh</id>
    <properties>
        <testcase.category>com.categories.PriorityHigh</testcase.category>
    </properties>
</profile>
<profile>
    <id>PriorityMedium</id>
    <properties>
        <testcase.category>com.categories.PriorityMedium</testcase.category>
    </properties>
</profile>
<profile>
    <id>PriorityLow</id>
    <properties>
        <testcase.category>com.categories.PriorityLow</testcase.category>
    </properties>
</profile>

然后在插件部分中使用:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${surefire.version}</version>
    <configuration>
        <groups>${testcase.category}</groups>
        <systemPropertyVariables>
            <automation.driver>${browser.name}</automation.driver>
        </systemPropertyVariables>
    </configuration>
</plugin>

我的问题是我想同时测试中级和高级时
-P PriorityHigh,PriorityMedium

但是它们没有添加/连接,而是覆盖了,因此仅运行中级测试。为了增加额外的难度,由于pom.xml抱怨$ {testcase.category}仅存在于配置文件中,并且没有默认值,因此我必须添加以下内容:
<testcase.category>com.categories.PriorityHigh,com.categories.PriorityMedium,com.categories.PriorityLow</testcase.category>

如果未指定配置文件。

有两个问题:
  • 如何使配置文件正确堆叠在“组”节点中?
  • 如果未指定配置文件(应该运行所有测试),有更好的工作方式吗?
  • 最佳答案

    最简单的方法是抛弃配置文件,仅使用系统属性:

    <properties>
      <testcase.category>com.categories.PriorityHigh,com.categories.PriorityLow</testcase.category>
    </properties>
    
    ...
    
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.19.1</version>
      <configuration>
        <groups>${testcase.category}</groups>
        ...
      </configuration>
    </plugin>
    

    然后:

    mvn verify -Dtestcase.category=com.categories.PriorityHigh
    # runs PriorityHigh tests
    
    mvn verify -Dtestcase.category=com.categories.PriorityHigh,com.categories.PriorityLow
    # runs PriorityHigh and PriorityLow tests
    
    mvn verify
    # runs PriorityHigh and PriorityLow tests
    

    如果您不想在Maven命令行上指定完全限定的类别类名称,则可以使用Build Helper插件为您限定名称:
    <properties>
      <testcase.category>PriorityHigh,PriorityLow</testcase.category>
    </properties>
    
    ...
    
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>build-helper-maven-plugin</artifactId>
      <version>3.0.0</version>
      <executions>
        <execution>
          <id>build-fq-testcase-category</id>
          <goals>
            <goal>regex-property</goal>
          </goals>
          <configuration>
            <name>fq.testcase.category</name>
            <regex>([^,]+)</regex>
            <value>${testcase.category}</value>
            <replacement>com.categories.$1</replacement>
          </configuration>
        </execution>
      </executions>
    </plugin>
    
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.19.1</version>
      <configuration>
        <groups>${fq.testcase.category}</groups>
      </configuration>
    </plugin>
    

    然后:

    mvn verify -Dtestcase.category=PriorityHigh
    # just run PriorityHigh tests
    
    mvn verify
    # run PriorityLow and PriorityHigh tests
    
    # etc.
    

    10-07 12:52
    查看更多