在平时性能测试过程中,有时候由于无法对被测接口或者方法性能指标进行准确的预估,所以只能凭借经常进行压测参数的相关测试。有时候压测的时间和次数设置偏大或者已经达到了测试的目的,而测试需要被终止,但是又不想损失掉测试数据,我们就要对测出过程中的数据继续进行记录和统计,输出测试报告。
由此引出了终止性能测试并输出报告的题目,还有一个场景是在性能压测服务的运行过程中,我们不可能终止JVM的运行,所以只能通过终止标志来提前结束测试过程。思路如下:在定时和定量压测模式实现--视频讲解中,已经讲到了通过key来控制结束。在本机压测的情况下,我们可以通过arthas修改JVM中静态变量的值或者调用stop()方法,具体实现如下:arthas命令ognl视频演示;在性能服务运行过程中,我们依然可以通过上述方法达到目的,单更好的办法是对外提供一个终止接口,调用stop()方法。终止测试运行不会影响后续数据的记录和测试结果的统计功能,具体的代码大家可以后台回复git查看全部开源框架内容,下面分享一下定量虚拟类的代码:
@Override public void run() { try { before(); List<Long> t = new ArrayList<>(); long ss = Time.getTimeStamp(); for (int i = 0; i < times; i++) { try { threadmark = mark == null ? EMPTY : this.mark.mark(this); long s = Time.getTimeStamp(); doing(); long e = Time.getTimeStamp(); excuteNum++; long diff = e - s; t.add(diff); if (diff > HttpClientConstant.MAX_ACCEPT_TIME) marks.add(diff + CONNECTOR + threadmark); if (status() || key) break; } catch (Exception e) { logger.warn("执行任务失败!", e); logger.warn("执行失败对象的标记:{}", threadmark); errorNum++; } } long ee = Time.getTimeStamp(); ("执行次数:{},错误次数: {},总耗时:{} s", times, errorNum, (ee - ss) / 1000 + 1); Concurrent.allTimes.addAll(t); Concurrent.requestMark.addAll(marks); } catch (Exception e) { logger.warn("执行任务失败!", e); } finally { after(); }
}- 「郑重声明」:“FunTester”首发,欢迎关注交流,禁止第三方转载。更多原创文章:「FunTester十八张原创专辑」,合作请联系Fhaohaizi@
。
热文精选
- Linux性能监控软件netdata中文汉化版
- 图解HTTP脑图
- JMeter如何模拟不同的网络速度
- 手机号验证码登录性能测试
- 删除List中null的N种方法--最后放大招
- 写给所有人的编程思维
- 好书推荐《Java性能权威指南》
- 如何成为全栈自动化工程师
- 自动化策略六步走
- 功能自动化测试策略


















