在平时性能测试过程中,有时候由于无法对被测接口或者方法性能指标进行准确的预估,所以只能凭借经常进行压测参数的相关测试。有时候压测的时间和次数设置偏大或者已经达到了测试的目的,而测试需要被终止,但是又不想损失掉测试数据,我们就要对测出过程中的数据继续进行记录和统计,输出测试报告。
由此引出了终止性能测试并输出报告的题目,还有一个场景是在性能压测服务的运行过程中,我们不可能终止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();
logger.info("执行次数:{},错误次数: {},总耗时:{} s", times, errorNum, (ee - ss) / 1000 1);
Concurrent.allTimes.addAll(t);
Concurrent.requestMark.addAll(marks);
} catch (Exception e) {
logger.warn("执行任务失败!", e);
} finally {
after();
}
}