当前位置: 首页 > news >正文

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

一、具体要求

1、接口现状

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

2、需求

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

二、jmeter实现

1、接口+json提取器

正常的接口+提取返回值
在这里插入图片描述
json 取器内容
在这里插入图片描述
验证json路径表达式,是否正确
在这里插入图片描述

2、BeanShell后置处理器

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

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)对比,去重,把不重复的值保存到文件

// ====== 调试信息输出 ======
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)对比,去重,把不重复的值保存到文件

在这里插入图片描述

http://www.lryc.cn/news/589218.html

相关文章:

  • 说下对mysql MVCC的理解
  • LeetCode|Day13|88. 合并两个有序数组|Python刷题笔记
  • 记录一条面试sql题目
  • 《每日AI-人工智能-编程日报》--2025年7月15日
  • vue实现el-table-column中自定义label
  • 对象数组列表转成树形结构--树形结构转成列表(处理菜单)
  • 牛客:HJ21 简单密码[华为机考][哈希]
  • T8332AD这是一款多拓扑芯片质量很硬朗?
  • 【jvm|基本原理】第四天
  • 力扣 hot100 Day45
  • LeetCode Hot100 【1.两数之和、2.两数相加、3.无重复字符的最长子串】
  • 拼多多笔试题目一
  • 人机协作系列(四)AI编程的下一个范式革命——看Factory AI如何重构软件工程?
  • 力扣——1071. 字符串的最大公因子
  • 基于Alpine构建MySQL镜像
  • sublime如何支持换行替换换行
  • PHP安全漏洞深度解析:文件包含与SSRF攻击的攻防实战
  • Azure FXmsv2 系列与 Azure FXmdsv2 系列虚拟机正式发布
  • 606. 二叉树创建字符串
  • Java全栈工程师面试实录:从电商支付到AI大模型的应用场景与技术栈解析
  • Android 获取 UserAgent (UA) 的三种方式深度解析:差异、风险与最佳实践
  • C++中的模板参数 vs 函数参数:编译期与运行期的分界线
  • X 射线探伤证考试核心:辐射安全基础知识点梳理
  • 如何正确分配及设置香港站群服务器IP?
  • 创客匠人:创始人 IP 的破局思维,重构知识变现的深层逻辑
  • LeetCode--46.全排列
  • 梳理Bean的创建流程
  • keeplived双击热备配置
  • 【高并发服务器】多路复用的总结 eventfd timerfd
  • 在Autodl服务器中使用VNC建立图形界面