jmeter接口对setResponseMessage在调试和稳定性测试时的区别处理

在调试和测试代码时,由于可能存在各种不确定性,所以通常都希望能够方便地查看发送和接收到的信息,这样有助于及时发现程序中的Bug。

1. 调试时的处理

@Override
    public SampleResult runTest(JavaSamplerContext arg0) {
        
    	SampleResult results = new SampleResult();
        
        // 设置开始时间
        results.sampleStart();        

        // ... 执行接口调用,返回结果                
                
        // 设置结束时间
        results.sampleEnd();
        
        boolean res = (boolean)result.get("result");
        
        // 根据测试结果,设置测试结果信息
        if(res == true){            
            results.setSuccessful(true);            
        }else{            
            results.setSuccessful(false);            
        }

        results.setResponseMessage((String)result.get("msg"));
        results.setResponseData((String)result.get("msg"));

        results.setContentType("application/json");
        results.setDataEncoding("utf8");
        
        // 返回结果信息
        return results;
    }

这里将接口返回的消息,写入result,这样可以在调试的时候,看到接口返回的信息,大大方便了接口调试。

不仅如此,还可以加入额外的调试信息到result中,在图形界面调试的时候,也是可以通过查看结果树(View Results Tree)看到。

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1653013646195,1537,interface1,,"{""msg"":""SUCCESS"",""code"":""0"",""data"":{""key"":""AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="",""pubKey"":""VPZIvA1HfbtYLux0FmKMMjSwsDIQt4BZ5N9h5zNqXLOyDz9H+wL08mn/1F3CVIbUxxOKLMOZx4F+wnFg4wV/RA==""},""no"":""1882930136461956"",""clientKey"":""26E901EB5AF141BB16496DF169525F902CD672AE4AE13D6C18BE678400294824"",""mobile"":""12905615809""}",线程组 1-1,,true,,375,0,1,1,null,0,0,0
1653013647778,245,interface2,,"{""msg"":""SUCCESS"",""code"":""0"",""data"":{""currentTime"":1653014925,""r"":""76DiB+9lA1qQhd6TcVR5OWPQUZmStm0XE3iCgvuomsM="",""s1_B"":""M75CAhR46FhW1Fj/1+/akyELUjcf879Bt9sMFrJnabI="",""s2_B"":""ndicCrK1/Jt1kiFI49pu2n/7Oyc+nqJYUKVEyKFjRR4=""}}",线程组 1-1,,true,,221,0,1,1,null,0,0,0

2. 稳定性测试时的处理

然而,在稳定性测试的时候,由于测试需要长时间的高并发压力测试,此时需要尽量减小测试结果文件jtl的大小,尤其对于返回数据比较多的场景下,就不能将返回的数据全部写入文件了,此时只需要根据测试结果,记录一个成功或失败的标识即可。

@Override
    public SampleResult runTest(JavaSamplerContext arg0) {
        
    	SampleResult results = new SampleResult();
        
        // 设置开始时间
        results.sampleStart();        

        // ... 执行接口调用,返回结果                
                
        // 设置结束时间
        results.sampleEnd();
        
        boolean res = (boolean)result.get("result");
        
        // 根据测试结果,设置测试结果信息
        if(res == true){            
            results.setSuccessful(true);
            results.setResponseMessage("1");
            results.setResponseData("1");            
        }else{            
            results.setSuccessful(false);
            results.setResponseMessage("0");
            results.setResponseData("0");            
        }

        // results.setResponseMessage((String)result.get("msg"));
        // results.setResponseData((String)result.get("msg"));

        results.setContentType("application/json");
        results.setDataEncoding("utf8");
        
        // 返回结果信息
        return results;
    }

简化以后的记录类似:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1653278686514,196,genKey,,1,线程组 1-1,,true,,1,0,1,1,null,0,0,0
1653278686711,433,signStep1,,1,线程组 1-1,,true,,1,0,1,1,null,0,0,0
1653278687144,0,Debug Sampler,200,OK,线程组 1-1,text,true,,366,0,1,1,null,0,0,0

这样既保证了数据的完整性,又大大缩写了测试结果文件的大小。

3. 处理前后的对比

在使用调试输出一样的输出时,测试文件jtl每分钟大概增加5M,优化以后,每分钟大约增加800K,使得最终的测试结果文件缩小到原来的五分之一左右。对于后续的报告生成是很有帮助的。

之前一个8小时的测试,没有经过优化的jtl文件大约2GB,配置jvm参数的最大堆内存到6GB,才成功生成报告。

后来一个24小时的测试,没有经过优化的jtl文件大约5.2GB,不管怎样增大对内存,增加到12G,仍然出现堆内存溢出。

4. 通过配置省去responsemessage

通过jmeter.properties的配置项#jmeter.save.saveservice.response_message=true,通过取消注释,将值设置为false,这样是可以不记录responsemessage。

但是这样生成的jtl文件,在进行web报告生成的时候会报错。

An error occurred: Error while processing samples: Consumer failed with message :Consumer failed with message :Consumer failed with message :Consumer failed with message :No column <responseMessage> found in sample metadata <timeStamp,elapsed,label,responseCode,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect>, check #jmeter.save.saveservice.* properties to add the missing column

意思是,jtl文件中缺少字段responsemessage,无法生成报告。

所以这个方法是行不通的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值