如何在Serenity框架中使用Selenium循环执行单个测试10次
如何用Serenity框架重复执行单个Selenium测试n次
下面提供几种实用的实现方式,满足你在Serenity框架内重复执行单测的需求:
方法1:JUnit 5 @RepeatTest注解(最简单)
Serenity原生支持JUnit 5,直接用@RepeatTest指定重复次数即可,无需额外配置:
import org.junit.jupiter.api.RepeatTest; import net.serenitybdd.junit5.SerenityJUnit5Extension; import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith(SerenityJUnit5Extension.class) public class RepeatedSingleTest { @RepeatTest(10) // 这里替换成你需要的次数n public void testTargetFunctionality() { // 你的Selenium测试逻辑,示例: // openUrl("https://your-test-url.com"); // $("#target-element").click(); // assertThat(pageTitle()).isEqualTo("Expected Title"); } }
执行后,Serenity报告会单独展示每次重复执行的结果,方便排查问题。
方法2:TestNG invocationCount属性
如果项目用TestNG作为测试框架,给测试方法添加invocationCount参数即可:
import org.testng.annotations.Test; import net.serenitybdd.testng.SerenityTestNGListener; import org.testng.annotations.Listeners; @Listeners(SerenityTestNGListener.class) public class RepeatedTestWithTestNG { @Test(invocationCount = 10) // 指定重复次数n public void repeatMySeleniumTest() { // 你的Selenium测试代码 // 可通过Thread.currentThread()区分不同执行实例 } }
如果需要并行执行,还可以搭配threadPoolSize参数,提升执行效率。
方法3:Maven命令行动态指定次数(灵活调整)
如果不想硬编码次数,可通过Maven参数动态传递n值:
- 测试类中读取系统变量:
import org.junit.jupiter.api.Test; import net.serenitybdd.junit5.SerenityJUnit5Extension; import org.junit.jupiter.api.extension.ExtendWith; @ExtendWith(SerenityJUnit5Extension.class) public class RepeatViaCommandLine { @Test public void dynamicRepeatedTest() { // 默认执行1次,可通过Maven参数覆盖 int repeatCount = Integer.parseInt(System.getProperty("repeat.count", "1")); for (int i = 0; i < repeatCount; i++) { // 执行测试逻辑 // 若测试失败,断言会自动终止循环并标记失败 assertThat(someElement.getText()).isEqualTo("Expected Text"); } } }
- 在pom.xml中配置Maven Surefire插件,传递系统参数:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.1.2</version> <configuration> <systemPropertyVariables> <repeat.count>${repeat.count}</repeat.count> </systemPropertyVariables> </configuration> </plugin> </plugins> </build>
- 运行时指定次数:
mvn verify -Drepeat.count=15
以上三种方法都能在Serenity框架内实现单测重复执行,根据项目使用的测试框架和灵活性需求选择即可。
内容的提问来源于stack exchange,提问作者Asad
相关产品推荐
相关产品推荐

