Java 如何使用maven运行两组测试,中间有延迟
我们的目标是对一个系统进行验收测试,该系统可以在指定的时间段内被禁用,并确保系统被禁用并返回到启用状态 我们的计划是:Java 如何使用maven运行两组测试,中间有延迟,java,maven,selenium,continuous-integration,maven-surefire-plugin,Java,Maven,Selenium,Continuous Integration,Maven Surefire Plugin,我们的目标是对一个系统进行验收测试,该系统可以在指定的时间段内被禁用,并确保系统被禁用并返回到启用状态 我们的计划是: 首先使用Selenium从维护客户端禁用系统X分钟 然后运行基于Java(或其他)的测试来查询系统,并断言系统已禁用 然后我们应该睡眠X分钟,并运行另一个测试,以确保系统再次启用 我们喜欢保持启用和禁用案例的测试分离,因此睡眠必须在maven本身中引入,或者作为某种插件类型的解决方案引入 问题:如何指定maven运行测试目标的顺序,并在其间添加参数化延迟,这些延迟将反馈给S
- 首先使用Selenium从维护客户端禁用系统X分钟
- 然后运行基于Java(或其他)的测试来查询系统,并断言系统已禁用
- 然后我们应该睡眠X分钟,并运行另一个测试,以确保系统再次启用
问题:如何指定maven运行测试目标的顺序,并在其间添加参数化延迟,这些延迟将反馈给Selenium?您可以应用以下配置:
- 配置
或maven surefire插件
(更适合集成测试,在本用例中听起来更合适)以通过its执行第一组测试,作为此插件的第一次执行maven故障保护插件
- 配置
(或maven-surefire插件
)以执行示例测试用例,其唯一目的是在确定的(或可配置的)时间内,再次通过,作为该插件的第二次执行(maven将根据maven-failsafe插件
文件声明遵守执行顺序)pom.xml
- 配置
(或maven-surefire插件
)以执行第二组测试(或本用例中的单次检查测试),再次通过,作为第三次执行(随后将作为最后一次执行)maven-failsafe插件
<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>
其中,-p
通过其id启用配置文件,我们还通过命令行覆盖sleep.time
属性的默认值,然后作为sleepParam
系统变量的值传递,该系统变量可以通过system.gerProperty(“sleepParam”)
调用从Java代码中获取
另外请注意,
maven failsafe插件
可能更适合您的场景,因为它可以更好地处理集成/验收测试的后执行,如its中所述,即使您的用例可能仍然由“maven surefire插件”提供服务。这可以在testng或junit级别实现吗。将虚拟测试与Thread.sleep的参数一起使用,该参数可以在testng.xml中给定值。测试方法顺序可以使用dependsOnMethods来固定。如果我想在这三个示例之前运行Selenium/Robot framework测试来设置阶段,我是否只需将正确的插件绑定到同一阶段,并在surefire/failsafe之前声明它,即互阶段的插件执行顺序是否与声明顺序相同?有没有办法将sleep time参数注入到build和still-plugin执行中?@TuomasToivonen是的,您仍然可以通过在上面的示例之前声明其执行来向同一阶段添加进一步的插件调用(推荐:作为同一配置文件的一部分)。关于参数的注入,请查看我对答案的更新。@Grasshopper可能是的,您的方法/建议在不同的粒度/细节级别上也会起作用。尽管如此,我仍然会通过surefire插件配置将其配置为概要文件的一部分,以使其远离默认构建并仅在需要时启用。
mvn clean verify -Pcheck-test -Dsleep.time=3000