Junit5重复测试
JUnit5 重复测试
什么是重复测试
重复测试是指执行相同的测试用例多次,以验证测试结果的可重复性和稳定性。通过重复测试,可以检测潜在的随机性或时序相关的问题,并确保系统在不同条件下的行为一致。
使用场景
-
稳定性测试:在特定配置或环境下,为了验证系统的稳定性,可能需要重复执行相同的测试用例多次。这有助于检测潜在的随机性或时序相关的问题。
-
失败重试:有时测试可能因为临时的环境或系统问题而失败。为了增加测试用例的稳定性,可以设置重试机制,使其在失败后进行多次重试,以排除临时问题或减少误报率。
-
测试随机性:某些测试场景需要对系统在不同条件下的表现进行测试。这时可以使用重复测试来验证系统在不同的随机因素下是否稳定。
-
性能测试:性能测试需要模拟高负载或长时间运行的情况。为了获取更准确的性能指标,可能需要重复执行相同的测试用例多次,并统计平均值或其他指标。
示例
- 注意,如果使用
@RepeatedTest(10)注解无需再使用@Test,代表重复执行 10 次测试用例 - 如果添加
@Test注解,则会多执行一次 - 使用格式
@RepeatedTest(10)
void repeatedTest() {
// ...
}
-
代码示例
- 未添加重复测试时
package junit5.repeat; import org.junit.jupiter.api.Test; //重复测试 public class repeatTest { //未添加重复测试时 @Test void Hogwarts(){ System.out.println("霍格沃兹测试用例"); } }- 用例执行一次

- 使用重复测试
package junit5.repeat; import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; //重复测试 public class repeatTest { //未添加重复测试时 // @Test // 使用RepeatedTest注解实现多次重复测试,注意不要和@Test结合 @RepeatedTest(5)// void Hogwarts(){ System.out.println("霍格沃兹测试用例"); } }- 添加
@RepeatedTest(5)注解后用例重复执行了 5 次,括号内的数字即为重复的次数。
设定重复用例的名称
重复用例的名称有默认的格式,按住键盘ctrl鼠标点击 @RepeatedTest 注解即可进入查看默认格式
- 以下是默认的显示格式,其中
CURRENT_REPETITION_PLACEHOLDER和TOTAL_REPETITIONS_PLACEHOLDER为两个变量,分别代表当前是重复的第几次和一共需要重复次数。RepeatedTest类中定义的变量我们都可以在定义显示名称时使用。
"repetition " + CURRENT_REPETITION_PLACEHOLDER + " of " + TOTAL_REPETITIONS_PLACEHOLDER

-
当使用默认的重复用例的名称无法满足我们的需求时,我们可以定义重复用例显示的名称,在我们引用变量是需要加花括号
{ },如{displayName}- 使用格式
//value变量代表重复的次数,使用name定义重复用例的名称 //如果没有使用DisplayName定义显示名称,displayName变量即为方法名 @RepeatedTest(value = 3, name = "{displayName} {currentRepetition}----{totalRepetitions}")- 代码实例

- 未使用 DisplayName 定义显示名称时默认的显示名称为方法名,可以看到重复用例的显示名称由默认的格式成功改为了我们自定义的格式

- 使用
@DisplayName注解 定义显示名称 - 代码示例
package junit5.repeat;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Test;
//重复测试
public class repeatTest {
//未添加重复测试时
// @Test
// 使用RepeatedTest注解实现多次重复测试,注意不要和@Test结合
// @RepeatedTest(5)//括号内填写重复次数
@DisplayName("支付接口测试")
//displayName代表显示名称,如果没有设定,那么会使用方法名称
// 在name =“”中,所有的{}中都是变量, 其他的都是固定的格式
@RepeatedTest(value = 3, name = "{displayName} {currentRepetition}---{totalRepetitions}")
void Hogwarts(){
System.out.println("霍格沃兹测试用例");
}
}
- 这是显示名称由默认的方法名改为了我们定义的显示名称,相应的重复名称显示相应发生了改变。
