在平时性能测试过程中,有时候由于无法对被测接口或者方法性能指标进行准确的预估,所以只能凭借经常进行压测参数的相关测试。有时候压测的时间和次数设置偏大或者已经达到了测试的目的,而测试需要被终止,但是又不想损失掉测试数据,我们就要对测出过程中的数据继续进行记录和统计,输出测试报告。

由此引出了终止性能测试并输出报告的题目,还有一个场景是在性能压测服务的运行过程中,我们不可能终止​​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@

热文精选

终止性能测试并输出报告_压测