Jmeter 记录请求和响应信息

发表时间 ·

Jmeter 默认是不记录请求和响应的具体信息的,不过依照 这一篇的方法 ,可以记录下响应数据。然而,仍然没有办法记录请求的数据。本文将探索如何做到记录请求数据到文件。

本文使用的 Jmeter 是 4.0 版本

对象及用途

SamplerResultprev 对象都可以用于记录请求-响应中一系列信息,也就是在 View Results Tree 中观察到的信息。它们的接口是相同的,但是所属的元件有不同。@SamplerResult@ 仅用于 JSR223 Sampler,而 prev 仅用于 JSR223 PreProcessor. 所以下面的做法,同时适用于 SamplerResultprev.

下面我们用 Dummy Sampler 模拟请求响应,尝试记录请求的信息,脚本如下。

Test Plan
  └─ Thread Group
      ├─ jp@gc - Dummy Sampler
      │    └─ JSR223 PostProcessor
      │
      └─ View Results Tree

在 JSR223 PostProcessor 中填入不同的代码,就能在 View Results Tree 中看到结果

获取响应信息

从 View Results Tree 的结果可以看到许多与请求、响应相关的信息,比如下图:

我们尝试在 JSR223 PostProcessor 的文本框中填入不同的语句,执行脚本,观察控制台中看到对应的 log 日志。比如:

log.info("Thread Name: " + prev.getThreadName());

得到:

我们继续在 JSR223 PostProcessor 的文本框中填入下面的语句,就能得到其他的关于响应的信息:

// 开始采样时间
log.info("Sample Start: " + (new Date(prev.getStartTime())).toString());
// 当前 Sampler 的加载时间,单位 ms
log.info("Load Time: " + prev.getTime().toString());
// 连接时间,单位 ms
log.info("Connect Time: " + prev.getConnectTime().toString());
// 延时
log.info("Latency: " + prev.getLatency().toString());
// 响应中的字节数
log.info("Size in bytes: " + prev.getBytesAsLong().toString());
// 发送的字节数
log.info("Sent bytes: " + prev.getSentBytes().toString());
// 响应 header 的字节数
log.info("Header size in bytes: " + prev.getHeadersSize().toString());
// 响应 body 的字节数
log.info("Body size in bytes: " + prev.getBodySizeAsLong().toString());
// 合并 Sample 个数
log.info("Sample Count: " + prev.getSampleCount().toString());
// 发生错误个数
log.info("Error Count: " + prev.getErrorCount().toString());
// 返回数据格式
log.info('Data type("text"|"bin"|""): ' + prev.getDataType().toString());
// 响应状态码
log.info("Response Code: " + prev.getResponseCode().toString());
// 响应消息
log.info("Response Message: " + prev.getResponseMessage().toString());
// 响应的Header 
log.info("Response Header: " + prev.getResponseHeaders().toString());
// 响应的内容类型
log.info("ContentType: " + prev.getContentType().toString());
// 响应的数据编码
log.info("DataEncoding: " + prev.getDataEncodingNoDefault().toString());

就能得到 View Results Tree 中第一个标签(Sampler result)看到的结果。

获取请求内容

View Results Tree 中第二个标签( Request )看到的请求,可以用下面的函数获得:

// 获取请求内容
log.info("Request: " + prev.getSamplerData());

获取响应内容

View Results Tree 中第三个标签( Request )看到的请求,可以用下面的函数获得:

// 获取请求内容
log.info("Response: " + prev.getResponseDataAsString());

相关文章   欢迎到 留言板 写下你的看法。
  本页面内容采用 署名协议 CC-BY 授权。欢迎转载,请保留原文链接