超时测试
1.什么是超时测试?
看被测试方法是否在规定的时间内执行完
除了要保证结果争取还要保证在规定的时间内执行完
就像考试那样 不仅要求结果正确还得在规定的时间内写完
被测试方法执行时间>规定时间⇒测试不通过
被测试方法执行时间<规定时间⇒测试通过
2.超时测试的两种方式
- 使用@Test(timeout=规定时间)
针对某个方法 哪个方法要就写那个方法上面
- 使用@Rule注解和Timeout对象
针对整个类中的所有方法 只要写一次 对所有方法起作用
3.准备被测试类
javascript
package com.jaylan.example.time_out_test;
// 超时测试被测试代码
public class Addtion {
public int add(int x,int y)
{
int result=0;
try {
// 等待5000毫秒 (5s)后执行
//该方法最少要执行 5000毫秒
Thread.sleep(5000);
//两数相加
result=x+y;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
4.使用@Test(timeout=规定执行时间)进行超时测试
- 编写测试方法并给每个方法规定执行时间
设置执行时间模板
javascript
@Test(timeout=规定执行时间)
测试方法{
方法体
}
规定执行时间写在参数中 单位是毫秒
javascript
package com.jaylan.example.time_out_test;
import static org.junit.Assert.*;
import org.junit.Test;
public class AddtionTest {
//超时测试 使用@Test(timeout=规定方法执行时间)
@Test(timeout=6000)
//规定 要在6000毫秒内执行完毕 能通过
public void test01() {
Addtion addtion=new Addtion();
//
assertEquals(2, addtion.add(1, 1));
}
@Test(timeout=4000)
//规定 要在4000毫秒内执行完毕 不能通过(因为 最少执行5000毫秒)
public void test02() {
Addtion addtion=new Addtion();
//
assertEquals(2, addtion.add(1, 1));
}
}
- 代码执行结果
5.使用@Rule 进行超时测试
- 导入相关类库
javascript
import org.junit.rules.*;//Timeout对象所在类库
import org.junit.Rule;//@Rule注解
- 创建Timeout对象并设置执行时间
javascript
@Rule
public Timeout timeOut=new Timeout(规定执行时间);
!!!Timeout对象必须为public修饰
规定执行时间是Timeout的参数
- 编写测试方法
javascript
@Test //执行时间<6000毫秒 通过
public void test01() {
Addtion addtion=new Addtion();
assertEquals(2, addtion.add(1, 1));
}
@Test //执行时间<6000毫秒 通过
public void test02() {
Addtion addtion=new Addtion();
assertEquals(4, addtion.add(2, 2));
}
- 完整代码
javascript
package com.jaylan.example.time_out_test;
import static org.junit.Assert.*;
import org.junit.Test;
//导入Rule相关类库
import org.junit.rules.*;
import org.junit.Rule;
//使用 @Roule 进行 超时测试
public class AddtionTest2 {
@Rule
public Timeout timeOut=new Timeout(6000);
//创建 规定时间对象 所有执行作用于类中所有执行方法
//每个方法都必须在 6000毫内执行完毕
@Test //执行时间<6000毫秒 通过
public void test01() {
Addtion addtion=new Addtion();
assertEquals(2, addtion.add(1, 1));
}
@Test //执行时间<6000毫秒 通过
public void test02() {
Addtion addtion=new Addtion();
assertEquals(4, addtion.add(2, 2));
}
}
- 执行结果
两测试方法都在预期时间内执行完毕测试通过
5.小结
- 使用@Test(timeout规定执行时间) 只能针对一个测试方法
- @Test(timeout规定执行时间) 要写在 要进行超时测试的方法上 哪个方法要写哪个上面
- 使用@Rule 时 则对整个测试类中所有方法有效
- @Test(time=规定执行时间)针对的是某个方法 而@Rule则对整个类中所有方法都起作用
- @Rule要创建Timeout对象 且必须为public修饰
- 两种超时测试的方法 中时间的单位都是毫秒 1000毫秒=1秒