java - 如何使用 Maven 运行两组测试,中间有延迟

标签 java maven selenium continuous-integration maven-surefire-plugin

我们的目标是对可以在指定时间内禁用的系统进行验收测试,并确保系统禁用并恢复启用。

我们的计划是:

  • 首先使用 Selenium 从维护客户端禁用系统 X 分钟
  • 然后运行基于 Java(或其他)的测试来查询系统,并断言系统已禁用
  • 然后我们应该 hibernate X 分钟并运行另一个测试以确保系统再次启用。

我们希望保持启用和禁用情况的测试分离,因此 sleep 必须在 Maven 本身中引入,或者作为某些插件类型的解决方案引入。

问题:如何指定 Maven 运行测试目标的顺序,并在其间添加参数化延迟,并将其馈送到 Selenium?

最佳答案

您可以应用以下配置:

  • 配置 maven-surefire-pluginmaven-failsafe-plugin (更适合集成测试,在这个用例中听起来更合适)来执行第一个通过其 include/exclude mechanism 进行的一组测试,作为此插件的第一次执行
  • 配置maven-surefire-plugin(或maven-failsafe-plugin)来执行示例测试用例,其唯一目的是 sleep在确定的(或可配置的)时间内,再次通过 include/exclude mechanism ,作为该插件的第二次执行(Maven 将按照 pom.xml 文件声明尊重执行顺序)
  • 配置maven-surefire-plugin(或maven-failsafe-plugin)来执行第二组测试(或单个检查测试,在此使用案例),再次通过 include/exclude ,作为第三次执行(然后将作为最后一次执行)。

在同一阶段使用相同的插件并执行多次将确保您获得 declaration order will be followed在 Maven 执行期间。

下面是上述方法的示例片段:

<profile>
    <id>check-test</id>
    <build>
        <properties>
           <sleep.time>2000</sleep.time>
        </properties>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <executions>
                    <execution>
                        <id>first-execution</id>
                        <phase>test</phase>
                        <configuration>
                            <includes>
                                <include>*FirstTestsSample.java</include>
                            </includes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>second-execution</id>
                        <phase>test</phase>
                        <configuration>
                            <includes>
                                <include>SleepTest.java</include>
                            </includes>
                            <systemPropertyVariables>
                               <sleepParam>${sleep.time}</sleepParam>
                            </systemPropertyVariables>
                        </configuration>
                    </execution>
                    <execution>
                        <id>third-execution</id>
                        <phase>test</phase>
                        <configuration>
                            <includes>
                                <include>CheckTest.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

注意,我将所有内容包装在 Maven profile 中为了干净起见,因为您可能不希望此行为作为默认构建的一部分,而仅按需执行(或作为 CI 作业的一部分)。

如果您需要配置 hibernate 时间,则可以通过 systemPropertyVariables 配置每个执行的相关配置部分。选项。

然后您可以按如下方式调用您的构建:

mvn clean verify -Pcheck-test -Dsleep.time=3000

其中 -P 通过其 id 启用配置文件,我们还通过命令行覆盖 sleep.time 属性的默认值,然后作为值传递sleepParam 系统变量,可以通过 System.gerProperty("sleepParam") 调用从 Java 代码中获取。

<小时/>

另请注意,maven-failsafe-plugin 可能更适合您的场景,因为它可以更好地处理集成/验收测试的执行后,如其 official page 中所述。 ,即使您的用例可能仍然由“maven-surefire-plugin”提供服务。

关于java - 如何使用 Maven 运行两组测试,中间有延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978372/

相关文章:

java - 如何在不使用 IDE 的情况下将 Maven pom.xml 添加到现有项目?

java - 如何在 Selenium WebDriver 的属性文件中使用多行属性?

java - 当我从 Java 中的 ArrayList 中删除 1 个对象时。接下来会发生什么?

java - TLS Android 的问题 - Netty

java - 在 war 中的类文件夹中找不到类

java - 无法通过selenium单击工具提示中的链接

testing - 有什么方法可以在打开 firefox 时从 Selenium IDE 中自动运行测试套件?

java - 无法对非静态方法进行静态引用

java - Android上单个物理文件中的多个类

java - 可以编译较新的 Java 版本(9、10、11)以在较旧的平台(例如 Java 8)上运行吗?