使用 JMeter 提取数据保存到文件

简介: 使用 JMeter 提取数据保存到文件

1. 概览

在本文中,我们将使用两种方式在 JMeter 中提取数据并写入外部文件中。

2. 配置 JMeter 脚本

首先来创建一个 JMeter 脚本。创建一个只包含一个线程的 Thread Group(保持创建 Thread Group 的默认配置)

image.png

在这个 Thread Group 内添加一个 HTTP Sampler

image.png

设置这个 HTTP Sampler 来调用本地运行的API。我们可以使用一个简单的REST Controller 来定义 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 字段。

HTTP Sampler 请求应如下所示:

image.png

3. 使用 Listener 保存提取的内容

现在我们使用 Save Responses to a file 监听器提取我们想要的内容到一个文件中:

image.png

使用这个监听器很方便,但是提取到文件的内容方面没有太大的灵活性。对于我们的例子,这将生成一个JSON 文件,该文件保存到 JMeter 当前运行的位置(尽管路径可以在 Filename Prefix 字段中配置)。

4. 使用 POSTProcessor 保存提取的内容

另一种将数据提取到文件的方法是创建 BeanShell PostProcessorBeanShell 是一个非常灵活的脚本处理器,它允许我们使用 Java 代码编写脚本,并使用 JMeter 提供的一些内置变量。

BeanShell 可以用于各种不同的用例。在这种情况下,创建一个 BeanShell PostProcessor,并添加一个脚本来帮助我们将一些数据提取到文件中:

image.png

将如下代码添加到 BeanShell PostProcessor 中:

FileWriter fWriter = new FileWriter("/<path>/result.txt", true);
BufferedWriter buff = new BufferedWriter(fWriter);
buff.write("data");
buff.close();
fWriter.close();
复制代码

现在我们可以通过这个简单的脚本,将字符串数据输出到 result.txt 文件中。这里需要注意的一点是 FileWriter 构造函数的第二个参数。这必须设置为true,以便 BeanShell 将内容追加到文件而不是覆盖它。在JMeter中使用多线程时,这一点非常重要。

接下来,我们想提取一些对我们的用例更有意义的东西。让我们利用 JMeter 提供的 ctx 变量。这将允许我们访问运行 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 变量。它是一个 map 类型,可以在PostProcessors 中用来存储和检索字符串数据。

对于这个更复杂的示例,让我们在文件提取器之前创建另一个 PostProcessor。这将通过 HTTP 请求的 JSON 响应内容进行搜索:

image.png

这个提取器将创建一个名为 message 的变量。剩下要做的就是在我们的文件提取器中引用这个变量,将其输出到我们的文件中:

buff.write("More complex extraction : " + vars.get("message"));
复制代码

注意:我们可以将此方法与其他后处理器(如“正则表达式提取器”)结合使用,以更定制化的方式收集信息。

5. 总结

在本文中,我们介绍了如何使用 BeanShell PostProcessorListener 将数据从 JMeter提取到外部文件。我们使用的 JMeter 脚本和 Spring REST 应用程序可以在 GitHub 上找到。


相关文章
|
10月前
|
测试技术
jmeter文件导入实现数据驱动的自动化测试 (2)
jmeter文件导入实现数据驱动的自动化测试 (2)
|
10月前
|
测试技术 数据处理
jmeter文件导入实现数据驱动的自动化测试 (1)
jmeter文件导入实现数据驱动的自动化测试 (1)
|
11月前
jmeter csv文件参数化
jmeter csv文件参数化
|
11月前
Jmeter返回响应体写入txt文件的操作
Jmeter返回响应体写入txt文件的操作
147 0
|
测试技术
JMeter While循环控制器应用之遍历获取文件参数
JMeter While循环控制器应用之遍历获取文件参数
106 0
|
Linux 开发工具 数据格式
JMeter 报告监听器导入.jtl结果文件报错解决方案
JMeter 报告监听器导入.jtl结果文件报错解决方案
273 0
|
JSON 测试技术 数据格式
JMeter 监听器之保存响应到文件
JMeter 监听器之保存响应到文件
305 0
JMeter 监听器之保存响应到文件
|
测试技术 开发者
性能测试|JMeter上传下载文件
性能测试|JMeter上传下载文件
148 0
性能测试|JMeter上传下载文件
Mac Jmeter导入外部.jmx文件时报错“com.thoughtworks.xstream.converters.ConversionException”
Mac Jmeter导入外部.jmx文件时报错“com.thoughtworks.xstream.converters.ConversionException”
Mac Jmeter导入外部.jmx文件时报错“com.thoughtworks.xstream.converters.ConversionException”
jmeter监控数据jtl文件生成图像-性能监控详解(3)
jmeter监控数据jtl文件生成图像-性能监控详解(3)
jmeter监控数据jtl文件生成图像-性能监控详解(3)