使用 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 上找到。


相关文章
|
5月前
|
JSON JavaScript 测试技术
掌握JMeter:深入解析如何提取和利用JSON数据
Apache JMeter教程展示了如何提取和使用JSON数据。创建测试计划,包括HTTP请求和JSON Extractor,设置变量前缀和JSON路径表达式来提取数据。通过Debug Sampler和View Results Tree监听器验证提取结果,然后在后续请求和断言中使用这些数据。此方法适用于复杂测试场景,提升性能和自动化测试效率。
|
5月前
|
测试技术 Linux Apache
掌握JMeter参数化技巧:通过CSV文件实现高效登录压测
在本文中,我们将探讨如何使用 Apache JMeter 通过 CSV 数据文件进行登录性能测试参数化。首先创建一个包含用户名和密码的 `users.csv` 文件。接着在 JMeter 中,创建测试计划,添加线程组,配置 CSV 数据集,设置文件路径、编码及变量名。然后,创建 HTTP 请求并添加参数,使用 `${username}` 和 `${password}` 引用 CSV 中的数据。最后,添加监听器如查看结果树和聚合报告以分析测试结果。通过这种方法,能更有效地模拟真实用户行为,提高测试覆盖率,助力性能瓶颈的发现和优化。
|
6月前
|
监控 数据可视化 Java
性能工具之Jmeter 后置监听器可视化数据逻辑
【2月更文挑战第29天】性能工具之Jmeter 后置监听器可视化数据逻辑
83 2
性能工具之Jmeter 后置监听器可视化数据逻辑
|
Java Windows
Jmeter安装使用(附下载文件和TPS工具)
Jmeter安装使用(附下载文件和TPS工具)
576 1
|
测试技术 数据安全/隐私保护
jmeter--全局参数设置与CSV数据导入
jmeter--全局参数设置与CSV数据导入
|
Java 测试技术 Shell
使用JMeter模拟设备通过MQTT发送数据
使用JMeter模拟设备通过MQTT发送数据
453 0
使用JMeter模拟设备通过MQTT发送数据
|
测试技术 数据安全/隐私保护
|
测试技术
jmeter文件导入实现数据驱动的自动化测试 (2)
jmeter文件导入实现数据驱动的自动化测试 (2)
134 0
|
测试技术 数据处理
jmeter文件导入实现数据驱动的自动化测试 (1)
jmeter文件导入实现数据驱动的自动化测试 (1)
124 0