Jmeter 修改Sampler result 结果信息

首先说一下,jmeterSampler result是什么?

Jmeter Samplers result jmeter在向服务器发送请求后,接收到服务器响应的基本信息的展示,如 sample 的开始请求时间、发送的内容大小、基于协议的响应状态码和响应消息等信息。

什么是基于协议的响应状态码和响应消息。比如http协议的状态码:200400等,和response messageok,这些都是http自身定义的状态码和消息。而接口的响应内容一般也会定义一些状态码或者状态信息。不过这些是后端开发者自定义的内容,比如某个接口的响应内容中包含:{status:ok,code:200,response:[...]},这类信息是不会在Sample result中展示出来,而是在response data中显示。

sampler result 中,还记录当前接口是否请求成功的信息,比如当请求某个接口失败后,在结果树中就会以红色形式标记出来。

 

一般情况下,最好不要随意修改响应结果信息,在什么情况下要修改响应结果呢?

最近在用jmeterwebsocket接口连接k8spod对另一台pod机进行ping超出时,如果ping pod存在则响应ping的结果信息。如果ping pod不存在时,不会响应任何信息,导致jmeter websocket在循环接收消息超时后,会被标记为失败。与实际期望的结果不符。

大致的业务场景为:

PodA 存在,且开机状态,ip地址:15.xx.1.35

PodB 存在,且开机状态,ip地址:15.xx.1.36

PodC 存在,关机状态, ip地址:15.xx.1.37

用例1podA ping podB 地址正常响应ping 的信息  --pass

用例2podA ping podC 地址无响应信息      --pass

jmeter中用websocket 实现podA ping podC时,当长时间没有响应信息,导致jmeter认为该请求失败,由于websocket是长连接类型,运行不断地请求服务信息。而且在WebSocket Single Read Sampler 中,已设置了超时不标记为错误。也没有达到预期效果。

 执行结果会有时候,没有响应时,执行通过。有时候没有响应时,执行失败

但实际期望的结果是,pingpodC(未开机)没有响应。是正确的

因此,需要通过干预当sampler result结果,当请求response code 报:Sampler error: unexpected frame type (ping). 时,忽略该错误,标记该请求为成功。

 

实际操作如下:

1、WebSocket Single Read Sampler 中的后置处理器中,通过beanshell 获取到该sample的执行结果。

2、判断response code 等于:Sampler error: unexpected frame type (ping). 时,标记该请求成功。

实际代码如下:

import org.apache.jmeter.samplers.SampleResult;
 
// 获取当前的SampleResult
SampleResult sr = ctx.getPreviousResult();
 
// 设置新的Response Code
//sr.setResponseCode("test code");
// 
//// 设置Response Message,如果需要的话
//sr.setResponseMessage("Read timeout, no response received");
String response_code  = sr.getResponseCode();

log.info(response_code);
if(response_code.equals("Sampler error: unexpected frame type (ping).")){
    // 设置sample 为成功
    sr.setSuccessful(true);
}

最终执行结果,当出现Sampler error: unexpected frame type (ping).错误类型时,不会在显示执行失败了。

可以看到虽然,jmeter日志中显示该请求是失败的,但实际上已经标记为:通过了

posted @ 2024-12-22 13:23  西夏一品唐  阅读(3)  评论(0编辑  收藏  举报