1.概述
在本教程中,让我们探索两种从Apache JMeter提取数据并将其写入外部文件的方法。
2.设置基本的JMeter脚本
现在让我们开始创建一个基本的JMeter脚本。让我们Thread Group
(这是创建Thread Group
时的默认设置):
现在,在该Thread Group
,创建一个HTTP Sampler
:
让我们设置HTTP Sampler
来调用在localhost.
我们可以通过使用简单的REST控制器定义API开始:
@RestController
public class RetrieveUuidController {
@GetMapping("/api/uuid")
public Response uuid() {
return new Response(format("Test message... %s.", UUID.randomUUID()));
}
}
另外,我们还定义Response
实例,如上所引用:
public class Response {
private Instant timestamp;
private UUID uuid;
private String message;
// getters, setters, and constructor omitted
}
现在让我们使用它来测试我们的JMeter脚本。默认情况下,它将在端口8080上运行。如果我们无法使用端口8080,则需要相应地更新HTTP Sampler
Port Number
字段.
HTTP Sampler
请求应如下所示:
3.使用侦听器编写提取的输出
接下来,让我们使用类型Save Responses to a file
的侦听器将所需的数据提取到文件中:
使用此侦听器很方便,但是在提取文件时并没有太大的灵活性。对于我们的情况,这将生成一个JSON文件,该文件保存到JMeter当前正在运行的位置(尽管可以在“ Filename Prefix
字段中配置路径)。
PostProcessor
编写提取的输出
我们可以将数据提取到文件中的另一种方法是通过创建BeanShell
PostProcessor
。 BeanShell
是一种非常灵活的脚本处理器,它使我们可以使用Java代码编写脚本,也可以使用JMeter提供的一些内置变量。
BeanShell
可以用于各种不同的用例。在这种情况下,让我们创建一个BeanShell
后处理器,并添加一个脚本来帮助我们将一些数据提取到文件中:
现在,将以下脚本添加到“ Script
部分:
FileWriter fWriter = new FileWriter("/<path>/result.txt", true);
BufferedWriter buff = new BufferedWriter(fWriter);
buff.write("data");
buff.close();
fWriter.close();
现在,我们有了一个简单的脚本,该脚本会将字符串data
输出到名为result的文件中。这里要注意的重要一点是FileWriter
构造函数的第二个参数。必须将其设置为true
以便我们的BeanShell
将追加到文件中而不是覆盖它。**在JMeter中使用多个线程时,这非常重要。**
接下来,我们想提取一些对我们的用例更有意义的东西。让我们利用JMeter提供**[ctx](https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html)
**这将使我们能够访问由运行HTTP请求的单线程持有的上下文。
从ctx
,让我们获取响应代码,响应标头和响应正文,并将它们提取到我们的文件中:
buff.write("Response Code : " + ctx.getPreviousResult().getResponseCode());
buff.write(System.getProperty("line.separator"));
buff.write("Response Headers : " + ctx.getPreviousResult().getResponseHeaders());
buff.write(System.getProperty("line.separator"));
buff.write("Response Body : " + new String(ctx.getPreviousResult().getResponseData()));
如果我们要收集特定的字段数据并将其写入文件,则可以使用[**vars**](https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html)
变量。这是我们可以在PostProcessors
使用的地图,用于存储和检索字符串数据。
对于这个更复杂的示例,让我们在文件提取器之前PostProcessor
这将搜索来自HTTP请求的JSON响应:
该提取器将创建一个名为message
的变量。剩下要做的就是在文件提取器中引用此变量以将其输出到我们的文件中:
buff.write("More complex extraction : " + vars.get("message"));
注意:我们可以将此方法与其他后处理程序(例如“正则表达式提取器”)结合使用,以更定制的方式收集信息。
5.结论
在本教程中,我们介绍了如何使用BeanShell后处理器和写侦听器将数据从JMeter提取到外部文件。
0 评论