jmeter summary report踩坑记录

使用jmeter压测一个web接口的时候,踩了一个小坑,记录下来,要压测一个http接口,此接口有权限控制、需要签名(几个参数取md5),在jmeter提供的函数中未找到md5的函数,所以自己写了个java request来实现签名算法,详细代码如下:

    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
    sampleResult = new SampleResult();

    sampleResult.setSampleLabel("sign");
    sampleResult.sampleStart();
    long timestamp = System.currentTimeMillis() / 1000;
    try {
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        String source = username+password+timestamp;
        messageDigest.update(source.getBytes());
        String sign = StringUtil.toHexString(messageDigest.digest());
        sampleResult.setResponseCode("200");
        sampleResult.sampleEnd();
        sampleResult.setResponseData("" + timestamp + " " + sign, StringPool.UTF_8);
        sampleResult.setResponseCodeOK();
        sampleResult.setSuccessful(true);

    } catch (Exception e) {
        e.printStackTrace();
    }
    return sampleResult;
}

打包,放在jmeter lib/ext下,不用多说,在jmeter界面下编辑http请求(签名请求和http请求各占50%),完成之后放在linux机器上运行sh jmeter.sh -n -t somename.jmx -l 1.jtl
jmeter会把qps信息打印到控制台,如下:

    summary + 114726 in 00:00:10 = 11472.6/s Avg:     8 Min:     0 Max:   150 Err:     0 (0.00%) Active: 100 Started: 100 Finished: 0
    summary = 79522702 in 01:55:28 = 11478.8/s Avg:     8 Min:     0 Max:  1682 Err:     0 (0.00%)
    summary + 102670 in 00:00:10 = 10267.0/s Avg:     9 Min:     0 Max:  1202 Err:     0 (0.00%) Active: 100 Started: 100 Finished: 0
    summary = 79625372 in 01:55:38 = 11477.0/s Avg:     8 Min:     0 Max:  1682 Err:     0 (0.00%)

看到这个结果,然后看一眼被压测的服务,cpu被打满了,所以得到该接口的qps为1万。
而后进行另外一个场景的压测,此接口有缓存,如果发现数据没有变化,就直接返回304,调整jmx文件,增加返回304的场景,继续压测,被压测服务依旧被打满,但是得到的qps却没有到1万,只有7500左右,试了几次都没有太大变化,故猜想可能是服务返回304的时候,多做了一些加解密的动作,导致cpu繁忙,qps降低。

和研发在排查代码的时候,却没有发现代码没有问题,没有多余的加解密动作,很是疑惑。后来在查看jmx脚本的时候,看到了自己写的签名java request,才反应出java summary report是要统计所有的请求的,第一次得到qps为1万,实际上是http请求+签名请求=1万,有效的qps才是5000,cpu被打满的请求下服务器只有5000的qps;增加了304的请求后,服务器资源被平分,200的请求 + 304的请求 + 签名的请求=7500qps。(前提是304的请求和200的请求占用服务器资源一致)重新验证后,果然。太久没用jmeter,踩坑,记录。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

(Spamcheck Enabled)