jmeter提取接口返回值,对比去重

一、具体要求

1、接口现状

  • 接口1:38个用户
  • 接口2:添加用户到小组(已经在小组的用户,不能重复添加),有22个用户在小组中

2、需求

(1)保存接口1,接口2中的用户id;

(2)对比接口1和接口2的值,把不重复的值,保存到新的文件夹

二、jmeter实现

1、接口+json提取器

正常的接口+提取返回值

json 取器内容

验证json路径表达式,是否正确

2、BeanShell后置处理器

(1)保存接口提取到的值

bash 复制代码
import java.io.*;

// 定义变量前缀和输出路径
String userPrefix = "user_";    // 用户变量前缀
String idPrefix = "id_";        // ID变量前缀
String outputPath = "/Users/jianju/Downloads/2.csv";  // 输出文件路径

// 创建BufferedWriter用于写入文件(true表示追加模式)
BufferedWriter bw = new BufferedWriter(new FileWriter(outputPath, true));

// 如果文件为空,写入CSV表头
if(new File(outputPath).length() == 0) {
    bw.write("用户名,用户ID\n");  // CSV文件标题行
}

// 获取用户和ID的总数
int userCount = Integer.parseInt(vars.get(userPrefix + "matchNr"));  // 用户总数
int idCount = Integer.parseInt(vars.get(idPrefix + "matchNr"));     // ID总数

// 遍历所有用户
for(int i=1; i<=userCount; i++) {
    // 获取当前用户和对应的ID(如果存在)
    String user = vars.get(userPrefix + i);  // 获取第i个用户
    String id = i <= idCount ? vars.get(idPrefix + i) : "";  // 获取对应的ID,不存在则为空
    
    // 如果用户不为空,写入CSV行
    if(user != null) {
        bw.write(user + "," + id + "\n");  // 写入用户名和ID
    }
}

// 关闭文件写入流
bw.close();

(2)对比,去重,把不重复的值保存到文件

bash 复制代码
// ====== 调试信息输出 ======
log.info("=== 开始处理数据 ===");
log.info("user_ALL值: " + vars.get("user_ALL"));
log.info("id_ALL值: " + vars.get("id_ALL"));

// ====== 1. 获取变量 ======
userStr = vars.get("user_ALL");  // 获取所有user字符串
idStr = vars.get("id_ALL");      // 获取所有id字符串

// ====== 2. 检查变量是否存在 ======
if (userStr == null || idStr == null) {
    log.error("错误:缺少必要变量");
    return;  // 终止执行
}

// ====== 3. 数据预处理 ======
// 3.1 分割字符串为数组,并去除空白项
userArray = userStr.split(",");
idArray = idStr.split(",");

// 3.2 初始化集合(自动去重)
userSet = new java.util.HashSet();
idSet = new java.util.HashSet();

// 3.3 处理user数据(去空格、去空值)
for (i = 0; i < userArray.length; i++) {
    val = userArray[i].trim();
    if (!val.isEmpty()) userSet.add(val);
}

// 3.4 处理id数据(去空格、去空值)
for (i = 0; i < idArray.length; i++) {
    val = idArray[i].trim();
    if (!val.isEmpty()) idSet.add(val);
}

// ====== 4. 计算差异数据 ======
diffValues = new java.util.ArrayList();
for (user : userSet) {
    if (!idSet.contains(user)) {
        diffValues.add(user);  // 收集user中有但id中没有的值
    }
}

// ====== 5. 结果输出 ======
// 5.1 调试信息
log.info("user数量: " + userSet.size());
log.info("id数量: " + idSet.size());
log.info("差异数量: " + diffValues.size());

// 5.2 写入文件
outputPath = "/Users/jianju/Downloads/3.csv";
try {
    fw = new java.io.FileWriter(outputPath);
    for (val : diffValues) {
        fw.write(val + "\n");  // 每行写入一个差异值
    }
    fw.close();
    log.info("结果已写入: " + outputPath);
} catch (e) {
    log.error("文件写入失败: " + e);
}

// 5.3 存储差异数量到JMeter变量
vars.put("DIFF_COUNT", diffValues.size() + "");

3、结果

(1)保存接口提取到的值

(2)对比,去重,把不重复的值保存到文件

相关推荐
电商数据girl15 小时前
关于私域电商网站,接入电商API数据接口示例
运维·开发语言·网络·python·json·php
Doris_LMS15 小时前
JSON、JSONObject、JSONArray详细介绍及其应用方式
java·json
老七秘制小程序1 天前
在Jetson AGX Orin上将docker目录挂载到大容量硬盘目录
docker·容器·eureka·json
ID_180079054731 天前
python采集拍立淘按图搜索API接口,json数据参考
大数据·数据库·python·json
张永清1 天前
软件性能测试工具的发展以及不同性能测试工具之间的使用对比总结
jmeter·性能测试·性能调优·性能分析
三天不学习1 天前
MySQL JSON 数据类型用法及与传统JSON字符串的对比 JSON数据类型简介
mysql·json
一杯科技拿铁2 天前
从 XML 到 JSON,再到 CBOR:数据交换格式的演进之路
xml·json
boy快快长大3 天前
【JMeter】压测脚本生成完善增强
jmeter
张永清3 天前
【图书介绍】清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》,专为解决实际问题而生
jmeter·性能测试·性能调优·性能分析
爱编码的程序员4 天前
python 处理json、excel、然后将内容转化为DSL语句,适用于数据处理(实用版)
人工智能·python·ai·json·excel·数据处理·dsl