Jmeter 默认是不记录请求和响应的具体信息的,虽然可以记录下响应数据。然而,仍然没有直接的办法记录请求的数据。本文将探索如何做到记录请求数据到文件。 本文使用的 Jmeter 是 4.0 版本 对象及用途 SamplerResult 和 prev 对象都可以用于记录请求-响应中一系列信息,也就是在 View Results Tree 中观察到的信息。它们的接口是相同的,但是所属的元件有不同。SamplerResult 仅用于 JSR223 Sampler,而 prev 仅用于 JSR223 PreProcessor. 所以下面的做法,同时适用于 SamplerResult 和 prev. 下面我们用 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 中第三个标签( Response Data )看到的请求,可以用下面的函数获得: // 获取请求内容 log.info("Response: " + prev.getResponseDataAsString());