「原创声明:保留所有权利,禁止转载」
在平时性能测试过程中,有时候由于无法对被测接口或者方法性能指标进行准确的预估,所以只能凭借经常进行压测参数的相关测试。有时候压测的时间和次数设置偏大或者已经达到了测试的目的,而测试需要被终止,但是又不想损失掉测试数据,我们就要对测出过程中的数据继续进行记录和统计,输出测试报告。
由此引出了终止性能测试并输出报告的题目,还有一个场景是在性能压测服务的运行过程中,我们不可能终止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();
}
}
-
郑重声明:“FunTester” 首发,欢迎关注交流,禁止第三方转载。更多原创文章:FunTester 十八张原创专辑,合作请联系
Fhaohaizi@163.com
。
热文精选
TesterHome 为用户提供「保留所有权利,禁止转载」的选项。
除非获得原作者的单独授权,任何第三方不得转载标注了「原创声明:保留所有权利,禁止转载」的内容,否则均视为侵权。
具体请参见TesterHome 知识产权保护协议。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。