ContiPerf是一个轻量级的测试工具

本文详细介绍了ContiPerf框架中用于性能测试的@PerfTest和@Required注解用法,包括如何设定执行次数、线程数量、执行时间及预期性能指标等,并提供了一个具体的测试类实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://testing.etao.com/node/626

http://iamzhongyong.iteye.com/blog/1757180

 

Options :

 

@PerfTest
用户可以在这个注释中添加性能测试的执行要求。
Invocations:方法的执行次数,例:@PerfTest(invocations = 300)重复执行300次;
Threads:同时执行的线程数,例:@PerfTest(invocations = 30, threads = 2)两个线程并发执行,每个线程执行15次,总共执行30次;
Duration:在指定时间范围内一直执行测试,例:@PerfTest(duration = 300)在300毫秒内反复执行。
三个属性可以组合使用,其中Threads必须和其他两个属性组合才能生效。当Invocations和Duration都有指定时,以执行次数多的为准。
例, @PerfTest(invocations = 300, threads = 2, duration = 100),如果执行方法300次的时候执行时间还没到100ms,则继续执行到满足执行时间等于100ms,如果执行到50次的时候已经100ms了,则会继续执行之100次。
如果你不想让测试连续不间断的跑完,可以通过注释设置等待时间,例, @PerfTest(invocations = 1000, threads = 10, timer = RandomTimer.class, timerParams = { 30, 80 }),每执行完一次会等待30~80ms然后才会执行下一次调用。
在开多线程进行并发压测的时候,如果一下子达到最大进程数有些系统可能会受不了,ContiPerf还提供了“预热”功能,例, @PerfTest(threads = 10, duration = 60000, rampUp = 1000),启动时会先起一个线程,然后每个1000ms起一线程,到9000ms时10个线程同时执行,那么这个测试实际执行了69s,如果只想衡量全力压测的结果,那么可以在注释中加入warmUp,即 @PerfTest(threads = 10, duration = 60000, rampUp = 1000, warmUp = 9000),那么统计结果的时候会去掉预热的9s。

 

@Required
通过这个注释可以添加一些对性能期望,如果达到期望值则测试通过,如果没有达到期望值则执行失败。
@Required(throughput = 20) :每秒钟至少执行20次
@Required(average = 50):测试全部完成平均执行时间为20ms
@Required(median = 45):至少50%次执行的时间在45ms内
@Required(max = 2000) :所有执行的执行时间没有超过2s
@Required(totalTime = 5000) :测试完成执行时间少于5s
@Required(percentile90 = 3000) :所有执行中90%的执行时间少于3s
@Required(percentile95 = 5000):所有执行中95%的执行时间少于5s
@Required(percentile99 = 10000):所有执行中99%的执行时间少于10s
@Required(percentiles = "66:200,96:500"):所有执行中66%的执行时间少于200ms,96%的执行时间少于500ms
@PerfTest@Required不仅可以指定某一个方法,也可以至于类的前面指定某一个类的执行参数。例,
同时ContiPerf还支持推Test Suites的性能测试,只需在类的最前面加注释@RunWith和@SuiteClasses

public class SimulatorTest {
 
 private final static Logger logger = Logger.getLogger(SimulatorTest.class);


 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
  logger.info("======================================");
  logger.info(" Performance Test Start");
  logger.info("======================================");
 }


 @AfterClass
 public static void tearDownAfterClass() throws Exception {
  logger.info(" Performance Test End");
 }


 @Before
 public void setUp() throws Exception {
 }


 @After
 public void tearDown() throws Exception {
 }

 

 @Rule
 public ContiPerfRule cpr = new ContiPerfRule();
 

 @Test
 @PerfTest(invocations=2, threads=2)
 //@PerfTest(threads=20, duration=25000, rampUp=1000, warmUp=19000)
 //@Required(max=20000, average=5000)
 public void testExecute() {
  int i = 0 ;
  boolean runFlag = true;
  
  do
  {
   i++;
   callSimulator();
   System.out.println(new Date() + " :  i  = " + i);
   try {
    Thread.sleep(3600000);//1 hour
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   if (i==8) runFlag=false;
  }
  while (runFlag);
 }
 
 public void callSimulator(){
  try {
   System.out.println("callSimulator");
  } catch (Exception e) {
   fail("Exception catched : " + e.getMessage());
  }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值