标签: maven-failsafe-plugin

Maven没有使用故障安全插件进行集成测试

当我运行时mvn clean install,对于integration-test阶段它不使用故障安全插件.

但是,如果我明确地调用插件来运行集成测试,它就可以工作(mvn failsafe:integration-test).

如何mvn clean installintegration-test阶段运行时让maven使用故障安全插件?

integration-testing maven maven-failsafe-plugin

5
推荐指数
1
解决办法
2685
查看次数

如何在maven-failsafe中运行非Java测试?

我正在使用Maven构建一个webapp项目,使用maven-failsafe-plugin进行集成测试.货物Glassfish3x容器开始绑定到预集成测试阶段,并作为集成后测试阶段的一部分停止.

但是,我的集成测试是基于pyUnit的脚本.我尝试使用exec-maven-plugin运行它们,并通过maven-bdd-plugin使用nosetests/freshen.

这两种方法都可以很好地运行脚本,但如果测试失败,它们会立即使Maven构建失败.Maven没有运行集成后测试阶段,将一个正在运行的货物集装箱放在后面,这使得任何其他尝试都无法运行测试.

如何配置maven-failsafe来解释我的失败exec是一个失败的测试,以便它完成它的工作并运行集成后测试阶段?

integration-testing exec-maven-plugin maven-failsafe-plugin

5
推荐指数
1
解决办法
361
查看次数

Failsafe 集成测试期间的错误不会导致 Maven 构建失败

我有 Failsafe 运行 Selenium 集成测试。如果我在测试中的断言之一没有通过并且测试失败,那么 Maven 构建将按预期失败。但是,如果测试出错,构建会意外地成功完成(输出如下)

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 14.075 sec <<< FAILURE!

Results :

Tests in error:
  test(uk.co.ned24.ExpandedIT)

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 minutes 40 seconds
[INFO] Finished at: Wed Jan 30 16:58:28 GMT 2013
[INFO] Final Memory: 78M/209M
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我不确定这是否会发生,Selenium 是否会导致意外行为?我查看了插件 doco 并找不到任何可以设置为在测试错误后使构建失败的标志。

理想情况下,我想让构建在测试错误时失败,所以希望得到任何建议!我附上了从我的 POM 中剪下的故障保护,以防万一。

谢谢,尼克

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <executions>
        <execution>
            <id>integration-test</id> …
Run Code Online (Sandbox Code Playgroud)

selenium integration-testing maven maven-failsafe-plugin

5
推荐指数
1
解决办法
3139
查看次数

Maven 在集成测试阶段运行码头

我用failsafe插件。

所以当我输入mvn failsafe:integration-test它时,我的集成测试会加星(这很棒)。

但我希望我jetty serverpre-integration舞台上开始。我该怎么办?

(我不想启动,mvn verify因为它涉及整个循环运行,但是mvn failsafe:integration-test- 似乎应该这样工作)

有两个插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>                                                              <!-- for starting jetty for integration tests -->
    <version>2.16</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>
<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>${jetty.version}</version>
    <configuration>
        <!--<jettyConfig>${project.basedir}/src/main/resources/config/jetty9.xml</jettyConfig>-->
        <stopKey>STOP</stopKey>
        <stopPort>9999</stopPort>
        <stopWait>5</stopWait>
        <scanIntervalSeconds>5</scanIntervalSeconds>
        <scanTargets>
            <scanTarget>${project.basedir}/src/main</scanTarget>
            <scanTarget>${project.basedir}/src/test</scanTarget>
        </scanTargets>
        <contextXml>${project.basedir}/src/test/resources/jetty-context.xml</contextXml>
        <webAppConfig>
            <contextPath>/${project.artifactId}-${project.version}</contextPath>
        </webAppConfig>
    </configuration>

    <executions>
        <execution>
            <id>start-jetty</id>
            <phase>pre-integration-test</phase>                                                         <!-- In the pre-integration-test phase the Jetty server …
Run Code Online (Sandbox Code Playgroud)

java integration-testing jetty maven maven-failsafe-plugin

5
推荐指数
2
解决办法
4890
查看次数

为什么failafe插件需要集成测试和验证目标?

我有下一个pom.xml

<project>
   ...
     <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>integration-test</id>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                    <configuration>
                        <argLine>${failsafeArgLine}</argLine>
                        <includes>
                            <include>**/dmg/*IT.java</include>
                        </includes>
                        <skipTests>${skipTests}</skipTests>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    ...
</project>
Run Code Online (Sandbox Code Playgroud)

问题是,当我取消验证目标时,即使存在测试失败,构建也每次都成功.

当我取消集成测试目标时,集成测试根本就没有运行

为什么failafe插件需要集成测试和验证目标?

integration-testing maven maven-failsafe-plugin

5
推荐指数
2
解决办法
2118
查看次数

通过测试监听器删除(复制)失败的TestNG结果

与此处发布的解决方案类似,TestNG重试失败的测试不会输出正确的测试结果,我试图在onFinish(ITestContext上下文)中使用测试监听器删除(重复)测试结果.

尽管使用context.getFailedTests().removeResult(result)删除结果似乎工作正常(结果实际上已被删除),但似乎存在"某些其他位置",其中结果被拉出,因为构建仍然失败.

还要注意,当我从上面的文章运行样本测试时(其中有一个重复的失败被删除,一个通过测试),我得到了"测试结果"(没有按预期清理)与"套件结果"的区别(重复故障按预期删除).

而且,报告从哪里提取结果以决定是否使构建失败?或者只是它在我清理失败的测试之前拉动结果......?

===============================================
    Default test
    Tests run: 3, Failures: 2, Skips: 0
===============================================

===============================================
Default suite
Total tests run: 2, Failures: 1, Skips: 0  
===============================================
Run Code Online (Sandbox Code Playgroud)

编辑:只是为了澄清,我们正在使用maven运行这些测试,他们是IT,所以我们使用failsafe插件运行它们.问题是即使看起来测试被删除,mvn验证仍然无法构建,因为它认为无论如何都会发现构建失败.

而且如果从Eclipse运行这样的测试,即使删除了测试,当套件完成时,仍会在日志中打印失败.

关于RetryAnalyzer:我根本不会考虑使用RetryAnalyzer良好/最佳实践,但如果您发现自己处于需要解决问题的情况,例如您继承了依赖RetryAnalyzer的测试套件,您可能会觉得这很有用.

java testng maven maven-failsafe-plugin

5
推荐指数
1
解决办法
5902
查看次数

Maven故障安全插件找不到任何测试用例

我在pom.xml中添加了以下插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <includes>
            <include>**/IT*.java</include>
        </includes>
        <testSourceDirectory>${basedir}/src/integration-test/java</testSourceDirectory>
        <testClassesDirectory>${project.build.directory}/it-classes</testClassesDirectory>
    </configuration>
    <executions>
        <execution>
            <id>integration-test</id>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
 </plugin>
Run Code Online (Sandbox Code Playgroud)

我在目录src \ integration-test \ java下有一个名为ITSample.java的测试,带有@Test批注。

Maven报告

[DEBUG]   (s) skip = false
[DEBUG]   (s) skipITs = false
[DEBUG]   (s) skipTests = false
[DEBUG]   (s) testSourceDirectory = ...\src\integration-test\java
[DEBUG]   (s) testClassesDirectory = ...\target\it-classes
[DEBUG]   (s) includes = [**/IT*.java]
Run Code Online (Sandbox Code Playgroud)

这似乎是预期的,但是当我运行mvn failsafe:integration-test时,我从maven回来:

[INFO] No tests to run.
Run Code Online (Sandbox Code Playgroud)

有什么想法,如果我错过了什么,或者我应该做一些不同的设置?

我注意到的另一件事是,当我运行mvn integration-test故障安全插件时,未执行。

java integration-testing maven maven-failsafe-plugin

5
推荐指数
1
解决办法
1367
查看次数

并行运行Spock测试

我的E2E测试运行得非常缓慢(25分钟),因为他们调用了大量服务并等待在数据库中填充一些数据.我想同时运行它.我正在使用以下maven-failsafe-plugin设置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>${plugin.failsave.version}</version>
    <executions>
        <execution>
            <id>run-integration-tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我的测试看起来像这样(如果需要可以提供更多信息):

@Stepwise
@DataJpaTest
@ContextConfiguration(classes = SomeControllerITConfig)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class SomeControllerIT extends Specification {
    // some variables definition

    def "test1":
        // some test

    def "test2":
        // some test

    // some more tests
}
Run Code Online (Sandbox Code Playgroud)

我试图使用threadCount属性parallel或者forkCount但对我来说没有任何作用.我还尝试在依赖项中强制执行以下maven-failsafe-plugin依赖项:

<dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-junit47</artifactId>
      <version>2.16</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

提前致谢!

spring integration-testing spock maven-failsafe-plugin e2e-testing

5
推荐指数
1
解决办法
3289
查看次数

如何检测我的测试在Jenkins环境中运行?

Assumption如果开发人员的计算机没有运行它的必备软件,那么我有一个JUnit测试可用于跳过该测试。尽管是“初级”,但这是一个集成测试。像这样:

int isSoftwarePresent = new ProcessBuilder("check software presence").start().waitFor();
Assume.assumeThat("Software not present", isSoftwarePresent, is(equalTo(0)));
Run Code Online (Sandbox Code Playgroud)

但是,由于这一假设,有一点我意识到测试已经停止在Jenkins的自动构建上运行,最终引入了应该停止测试的回归。

换句话说,Jenkins从属环境缺少必需的软件,从而导致测试被跳过。

自动化测试由Maven使用Jailkins Pipeline构建计划中的FailSafe插件运行。如何检测我的环境是詹金斯,以便使假设条件更加严格?

也就是说,我希望条件是这样的:

boolean isJenkinsBuild = /* true if this is being run inside a Jenkins build, false otherwise */;
boolean isSoftwarePresent = new ProcessBuilder("check software presence").start().waitFor() == 0;
Assume.assumeTrue("Software not present", isSoftwarePresent || isJenkinsBuild);
Run Code Online (Sandbox Code Playgroud)

甚至,

@Test
void testJenkinsEnvironment() {
    ...
    Assume.assumeTrue(isJenkinsBuild);
    Assert.assertTrue(isSoftwarePresent);
}

@Test
void testFeature() {
    ...
    Assume.assumeTrue(isSoftwarePresent);
    ...
}
Run Code Online (Sandbox Code Playgroud)

java junit maven jenkins maven-failsafe-plugin

5
推荐指数
2
解决办法
3945
查看次数

如何在不先编译的情况下运行maven failuresafe

我有一个包含单元测试和集成测试的多模块项目。我们使用 Jenkins 作为我们的管道:

  1. 构建+单元测试
  2. 部署到暂存区
  3. 针对分期的集成测试。

我想要实现的是:

  • 第一步-构建+单元测试+打包+安装
  • 第二步 - 部署已经打包的工件
  • 第三步 - 运行集成测试(无需重新构建)

第三步从干净的结帐开始,因此甚至没有target文件夹。

编辑 - 集成测试在配置文件内运行,因此它们在第一次构建期间不会运行

我想要实现的是在不编译代码的情况下运行集成测试(第三步)。

如果我使用mvn failsafe:integration-tests它,则表示没有任何测试(显然是因为它没有找到任何工件)。

当我添加时dependenciesToScan,它说它找不到 junit 提供程序 ( groups/excludedGroups require TestNG, JUnit48+ or JUnit 5 on project test classpath)。

有人可以帮助您了解如何在 jar 位于本地存储库中时运行测试而不进行编译吗?

maven maven-failsafe-plugin

4
推荐指数
1
解决办法
2443
查看次数