如何在 Jenkins for Maven 项目中运行 TestNG 失败的测试用例?

软件测试 自动化测试 硒网络驱动程序 测试 詹金斯
2022-02-01 19:31:46

我是 Jenkins 的新手,我已经在我的 Windows PC 上配置了它。在考虑失败之前,我必须运行两次失败的测试用例。我正在使用 TestNG 和 Selenium Webdriver 编写测试用例。

我在 Jenkins 中创建了一个作业,它映射到我的工作区并运行testng.xml. 我已经指定了testng.xmlin的路径pom.xml我创建了一个 Maven 项目,并运行了pom.xml我的测试用例。

现在,在成功运行所有测试用例之后,我得到了可靠的测试报告。我想运行失败的测试用例,即testng-failed.xml两次。我尝试在后期构建部分使用以下命令运行它:

cd path to workspace
mvn test -DtestNG.file=/target/surefire-reports/testng-failed.xml

但是当我运行上面的命令时,它会运行testng.xml而不是运行testng-failed.xml. 我不确定我是否在正确的路径上运行失败的测试用例。

我需要帮助,伙计们。我被困在这一点上。

4个回答

在上面的解释中,当您在 Jenkins 下的 Post 任务中重新运行测试时,failed-testng.xml 似乎会被删除,因为当您运行“mvn clean”时,它将删除存在 failed-testng.xml 的目标文件夹。要验证这一点,您需要访问 Jenkins 工作区,但您的软件测试公司可能无权访问它。

进一步按照以下步骤,他们将解决问题:

首先,您的 pom 应该可以配置为从命令行运行测试:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
      <forkCount>0</forkCount>
      <suiteXmlFiles>
        <suiteXmlFile>src/test/resources/${suiteXmlFile}</suiteXmlFile>
      </suiteXmlFiles>
    </configuration>
  </plugin>

然后为 Post 构建(您已经在做)配置 jenkins 以运行 failed-testng.xml。

但首先您必须将 failed-testng.xml 从目标文件夹复制/移动到框架内的任何其他文件夹(目标和测试输出文件夹除外,因为当您运行命令“mvn clean”时这些文件夹会被删除)。

以下是用于将文件从一个位置复制/移动到另一个位置的 Maven 插件:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.1</version>
    <executions>
      <execution>
        <id>copy-resources</id>
        <!-- here the phase you need -->
        <phase>validate</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${basedir}/target/failed-testng.xml</outputDirectory>
          <resources>          
            <resource>
              <directory>src/</directory>
              <filtering>true</filtering>
            </resource>
          </resources>              
        </configuration>            
      </execution>
    </executions>
  </plugin>

注意:此插件必须在测试执行后执行。

你必须做这样的事情

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version><!--$NO-MVN-MAN-VER$ -->
            <configuration>
                <!-- Sets the VM argument line used for unit tests are run. -->
                <suiteXmlFiles>
                    <suiteXmlFile>src/test/resources/testng/testng.xml</suiteXmlFile>
                    <suiteXmlFile>target/surefire-reports/testngfailed.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
 </plugin>

切换到 jUnit 是一种选择吗?

使用 jUnit 和适用于 maven 的 surefire 插件,您可以使用参数启动测试,该参数将在测试用例失败时重新启动。

mvn -Dsurefire.rerunFailingTestsCount=5 测试,其中 5 是接受失败时重新启动的最大次数,直到它产生错误为止。

更多信息可以在这里找到:https ://maven.apache.org/components/surefire/maven-surefire-plugin/examples/rerun-failing-tests.html

看看还有另一种方法来检查你失败的测试用例是否真的因为你的错误或任何其他事情而失败(例如,如果元素由于同步而没有得到,或者看到过时的元素,那么这些问题就在你的脚本中)你必须使用的任何方式testng 的 Analyzer 和 Transformer 接口运行多个失败的测试用例。