当前位置: 首页 > 知识库问答 >
问题:

确保测试无法运行时Maven构建失败

秦浩漫
2023-03-14

我注意到,有时在Jenkins上运行maven构建时,运行的Jbehave测试的数量会因运行的不同而不同。在分析日志时,我看到以下代码段:

    Failed to run story stories/cancel.story
java.lang.InterruptedException: stories/cancel.story
    at org.jbehave.core.embedder.StoryRunner$RunContext.interruptIfCancelled(StoryRunner.java:616)
    at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:514)
    at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:479)
    at org.jbehave.core.embedder.StoryRunner.runStepsWithLifecycle(StoryRunner.java:445)
    at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:305)
    at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:220)
    at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:181)
    at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:235)
    at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:207)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

问题是,当跳过测试或以这种方式运行失败时,构建仍然被视为成功。

是否有maven surefire插件配置,可以确保在测试失败时运行构建会导致失败?以下是maven surefire构建配置

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.11</version>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.11</version>
            <configuration>
                <includes>
                    <include>**/*TestSuite.java</include>
                </includes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9</version>
        </plugin>
        <plugin>
            <groupId>net.thucydides.maven.plugins</groupId>
            <artifactId>maven-thucydides-plugin</artifactId>
            <version>${thucydides.version}</version>
            <executions>
                <execution>
                    <id>thucydides-reports</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>aggregate</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.17</version>
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <reportPlugins>
                    <plugin>
                        <groupId>net.thucydides.maven.plugins</groupId>
                        <artifactId>maven-thucydides-plugin</artifactId>
                        <version>${thucydides.version}</version>
                    </plugin>
                </reportPlugins>
            </configuration>
        </plugin>
    </plugins>
</build>

共有1个答案

胡国兴
2023-03-14

您的maven surefire插件设置为完全跳过测试(使用

所以如果你真的想回答这个问题:

是否有maven surefire插件配置,可以确保在测试失败时运行构建会导致失败?

也就是说:您希望运行测试的是maven surefire插件,而不是maven failsafe插件,那么答案是:删除

        <configuration>
            <skip>true</skip>
        </configuration>

从你的POM。在这种情况下,您也不需要配置maven故障保护插件,因为它只会让您的测试运行两次。

但是如果您的目标是让maven-故障安全插件工作,那么我认为您可能有以下问题之一:

>

  • 没有运行正确的目标。作为插件帮助状态,您应该将其调用为

    mvn verify
    

    旧插件,与您使用的测试框架不兼容(当前版本为2.19.1)

    或此帮助建议:

    对于非常复杂的构建,最好将集成测试和验证目标的执行分开:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-failsafe-plugin</artifactId>
      <version>2.19.1</version>
      <executions>
        <execution>
          <id>integration-test</id>
          <goals>
            <goal>integration-test</goal>
          </goals>
        </execution>
        <execution>
          <id>verify</id>
          <goals>
            <goal>verify</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    

  •  类似资料:
    • 我们有一组UI测试每晚运行,有时一些测试由于网络故障而失败。为了避免假阴性测试结果,我使用了,它可以重新运行失败的测试多达3次。 当我从Eclispe右键单击套件运行测试时,它工作得非常好。xml—如果测试最初失败,但重试时通过,则第一个结果不算作失败。 但是,当作为Maven构建的一部分运行相同的测试时,如果任何测试失败,即使在重试时成功通过,构建也会失败。 例如,运行一个包含5个测试的套件,其

    • 我正在jenkins上运行一组测试,我得到以下结果: 好的东西告诉我行: maven-surefire-插件: 2.16是这里的问题,所以这里是我的pom文件检查: 我已经检查了maven仓库中的插件,我看到的唯一区别是插件标签中有插件,而在网站中它是在依赖标签中。 这里可能有什么错误? 谢谢 注:抱歉纯文本,但我不知道如何给代码上色=/

    • 我正在尝试使用 maven build 作为运行配置在 eclipse 中运行cucumber测试。当我运行配置时,构建成功,但浏览器不调用。因此,测试未运行。测试被跳过,给出一个信息“没有什么可编译的 - 所有类都是最新的”。我能够通过将功能文件作为cucumber功能运行来成功运行相同的测试。 请告诉我为什么要跳过测试。也让我知道运行maven构建cucumber测试的步骤。下面是我使用的po

    • 我有一个用TestNG编写的大型测试套件,需要几个小时才能完成。 我想让maven/surefire创建一个新套件,它是第一个套件的副本,但只包含失败的测试,这个套件应该运行得更快。 有可能创建这样一个套件吗? 作为回退,如果有这样的报告,我可以从一个易于解析的测试报告中自己创建它。 非常感谢。

    • 我有一个使用testng API动态创建testng.xml文件的项目,因此使用java的main函数,我的项目按预期工作,但是如果我使用'run as->maven build'通过maven运行我的项目,看起来只有BeforeSuite和BeforeTest类在运行,而实际的测试并没有运行。以下是我的pom.xml文件: 最后,这是StackTrace: 我想知道我错过了什么。

    • 我正在通过Maven运行测试用例。使用以下命令: 获取成功: 获取失败: 类名为LoginTest 堆栈跟踪: [错误]无法执行目标org.apache.maven.plugins:maven-surefire-plugin:2.12.4:project Web上的test(default-test):未执行任何测试!(设置-DFAILIFNOTESTS=FALSE忽略此错误。)->[帮助1]or