云压测 JMeter 请求和检查点日志打印

在 PTS 中,请求和检查点的总体情况,可以在 云压测控制台 > 测试场景 的服务明细和检查点明细中查看;单个请求的发送和接收详情,可以在控制台的请求采样中查看;具体的查看方法可以参考 解读报告 中的对应内容。

相关产品
云压测 产品页,含版本规格、价格与购买入口。

如果除了解读报告的内容外,对请求或检查点还有其他的查看需求,例如:

·查看请求采样中未记录的其他请求细节;

·查看设置的检查断言失败消息;

·查看检查断言失败时的请求内容;

·等等…

可以在执行过程中通过日志打印的方式,将需要查看的内容在施压机 > 日志下的引擎输出中打印出来。

注意:在压测任务执行的过程中打印额外的日志,会占用压测机的资源,且日志的采集和展示在控制台上的速率是有限的,如果没有必要,在正式压测的时候不建议这样使用。

一、请求日志

根据 JMeter 的 执行顺序,在请求采样 Sampler 之后的阶段都可以知道请求的执行情况,因此可以在 JMeter 的 Sampler 后面添加“JSR223 PostProcessor”,顾名思义,利用 JSR223 后置处理器在 Sampler 之后,通过脚本将请求细节打印到引擎日志中查看。

以下是 Groovy 脚本样例,其中prev可以代表请求采样的结果 SampleResult,对应的方法可以参考 JMeter 产品文档;如果有其他内容需要打印,用户可以自行进行数据获取和输出。

import java.time.LocalDateTime
// 获取 Sampler 名称
def samplerName = sampler.getName()
// 获取响应体
def responseBody = prev.getResponseDataAsString()
// 获取响应代码
def responseCode = prev.getResponseCode()
// 获取当前时间
def currentTime = LocalDateTime.now()
// 打印日志
log.info("Current Time: " + currentTime + ", Sampler Name: " + samplerName + ", Response Code: " + responseCode + ", Response Body: " + responseBody)

·将该 JMX 脚本在 PTS 上执行,在控制台的施压机标签的引擎输出中,可以看到我们打印出来的请求日志:

·如果脚本中有多个请求,但是只需要打印单个请求的细节查看,不需要全部打印,那么可以将 Post Processor 放在对应的请求里面,如下:

·如果需要把所有的请求细节都打印出来,那么可以将 Post Processor 放在和请求并列的位置,如下:

二、检查点日志

根据 JMeter 的 执行顺序,对于检查点的结果,不能使用 Post Processor 来进行获取,因为该阶段执行的时候,检查断言还没有执行,只有在 Listener 阶段才能知道检查断言的结果;因此,可以使用 Listener 来通过脚本将检查点细节打印到引擎日志中查看,使用 JSR223 Listener,以下是 Groovy 脚本样例,方法getAssertionResults()返回的AssertionResult可以参考 JMeter 产品文档。

import org.apache.jmeter.assertions.AssertionResult;
// 获取断言结果
AssertionResult[] results = prev.getAssertionResults();
// 遍历断言结果
for (int i = 0; i < results.length; i++) { AssertionResult result = results[i]; if (result.isFailure() || result.isError()) { // 打印断言失败或错误信息 log.info("Assertion failed: " + result.getFailureMessage()); }
}

·将该 JMX 脚本在 PTS 上执行,在控制台的施压机标签的引擎日志中,可以看到我们打印出来的日志:

·这里只打印了检查断言的结果和检查断言的 Failure Message,如果有需要,也可以参考前文的请求日志将检查断言失败的请求细节打印出来。

import org.apache.jmeter.assertions.AssertionResult;
// 获取断言结果
AssertionResult[] results = prev.getAssertionResults();
// 遍历断言结果
for (int i = 0; i < results.length; i++) { AssertionResult result = results[i]; if (result.isFailure() || result.isError()) { // 打印断言失败或错误信息 log.info("Assertion failed: " + result.getFailureMessage()); // 获取 Sampler 名称 def samplerName = sampler.getName() // 获取响应码 def responseCode = prev.getResponseCode() log.info("Sampler Name: " + samplerName + ", Response Code: " + responseCode) }
}

·如果 JMX 脚本中有多个检查断言,需要打印单个或需要全部打印的情况,可以参考前文有多个请求的情况下打印日志的方式,将 Listener 放置在不同的位置即可。

赞 (0)
上一篇 4天前
下一篇 4天前