Jmeter_循环获取请求接口的字段,并写入文件

news/2024/9/17 13:07:08/ 标签: jmeter

通过JSON提取器、计数器、beanshell,循环读取邮箱接口的返回字段,筛选出flag为3的收件人,并写入csv文件。

1、调用接口,获取所有的邮件$.data.total.count;

2、beanshell后置处理total转换成页码,这里是227/20,由于Math.ceil没有向上取整,所以加一;

String total = vars.get("total");
int totals = Integer.parseInt(total);
// Math.ceil没有向上取整,所以+1
int total_num = (int)Math.ceil(totals / 20) + 1;
//log.info(total_num.toString());
vars.put("total_num",total_num.toString());

3、设置第一个循环控制器;

4、配置计数器,与循环控制器一起,起到翻页的作用;

5、调用指定页码的接口;

6、正则提取所有的mid,也可以JSON提取;

7、再次设置循环控制器,循环mid个数的次数;

8、再次配置计数器,获取指定的mid,比如mid_1...,mid_20;

9、获取不同的mid,调用接口;这里如果使用${__V(mid_${__counter(,)},)}的话,第一个循环(1-20)正常,第二个循环,counter从21开始,因mid不存在而接口请求失败,所以需要使用${__V(mid_${count},)};

10、beanshell处理返回的数据,首先将json转换,获取flag为3的收件人,并写入csv文件;

import java.io.*;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;import java.io.BufferedWriter;
import java.io.FileWriter;
import org.apache.jmeter.services.FileServer;//import java.util.Date;
//import java.text.SimpleDateFormat;
// 
//SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
//String currentDate = dateFormat.format(new Date());
//vars.put("currentDate", currentDate);// 获取文件路径,这里使用FileServer.getAbsolutePath()获取绝对路径以确保跨平台兼容性
String filePath = FileServer.getFileServer().getBaseDir() + "/sina001_.csv";// 获取上个http请求返回的json数据
String jsonString = prev.getResponseDataAsString();
// 将json转为JSONObject
JSONObject obj = JSONObject.parseObject(jsonString);
// 拿到响应为true的请求
if(obj.getString("result").equals("true")){
// 提取json数组sendstatus
JSONArray rows =obj.getJSONObject("data").getJSONArray("sendstatus");
// 提取数组sendstatus中的flag
String flag = rows.get(0).get("flag").toString();
// flag=3表示发送失败
if(flag.equals("3")){// 获取收件人的邮箱地址String mailto = rows.get(0).get("mailto").toString();
//	log.info(mailto);try {// 创建一个 FileWriter 对象,true 表示追加模式FileWriter fstream = new FileWriter(filePath, true);// 创建一个 BufferedWriter 对象BufferedWriter out = new BufferedWriter(fstream);// 替换提取值String variableValue = mailto;// 将变量值写入文件,并添加换行符out.write(variableValue + "\r\n");// 关闭 BufferedWriter 和 FileWriterout.close();fstream.close();} catch (Exception e) {log.error("Error occurred while writing to file: " + e.getMessage());SampleResult.setSuccessful(false);SampleResult.setResponseMessage("Failed to write to file: " + e.getMessage());
}
}
}

fastjson的下载地址:Central Repository: com/alibaba

截取返回的body中的中文,比如退信原因,收件人等信息:

可以通过subject来判断,当为系统退信时,才会提取body中的相关信息;

import java.io.*;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;import java.io.BufferedWriter;
import java.io.FileWriter;
import org.apache.jmeter.services.FileServer;import java.util.Date;
import java.text.SimpleDateFormat;SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmm");
String currentDate = dateFormat.format(new Date());
//vars.put("currentDate", currentDate);// 获取文件路径,这里使用FileServer.getAbsolutePath()获取绝对路径以确保跨平台兼容性
String filePath = FileServer.getFileServer().getBaseDir() + "/sina001_detail_" + currentDate + ".csv";// 获取上个http请求返回的json数据
String jsonString = prev.getResponseDataAsString();
// 将json转为JSONObject
JSONObject obj = JSONObject.parseObject(jsonString);String subject = obj.get("data").get("subject").toString();
//log.info(subject.length().toString());
// "subject": "系统退信",字符长度为4
if(subject.length() == 4){String body = obj.get("data").get("body").toString();
String[] body1 = body.split("<br/>");//for(int i=0;i<body1.length;i++){
//	log.info(body1[i]);
//	}try {
// 创建一个 FileWriter 对象,true 表示追加模式
FileWriter fstream = new FileWriter(filePath, true);
// 创建一个 BufferedWriter 对象
BufferedWriter out = new BufferedWriter(fstream);
// 替换提取值
String variableValue = body1[5] + "," + body1[6];
// 将变量值写入文件,并添加换行符
out.write(variableValue + "\r\n");
// 关闭 BufferedWriter 和 FileWriter
out.close();
fstream.close();
} catch (Exception e) {log.error("Error occurred while writing to file: " + e.getMessage());SampleResult.setSuccessful(false);SampleResult.setResponseMessage("Failed to write to file: " + e.getMessage());
}
}


http://www.ppmy.cn/news/1524915.html

相关文章

Android 进程间通信

在 Android 中&#xff0c;进程间通信 (IPC, Inter-Process Communication) 是指在不同进程之间进行数据交换的机制。Android 提供了几种主要的 IPC 方法&#xff0c;每种方法适用于不同的场景。 1. Binder 机制 Binder 是 Android 核心的 IPC 机制&#xff0c;底层是通过操作…

联蔚盘云再获发明专利授权—多云环境下云资源自动化运维的方法与设备

上海联蔚盘云科技有限公司荣获了一项重要的发明专利——“多云环境下云资源自动化运维的方法与设备”&#xff08;专利授权号&#xff1a;CN 112667468 B&#xff09;。该专利旨在解决企业在多云环境下云资源管理和自动化运维的难题&#xff0c;标志着公司在云计算技术领域取得…

Facebook Marketplace:防封与出单策略

Facebook Marketplace为用户提供一个在本地交易商品的平台&#xff0c;包括二手商品、房屋出租和家政服务等都可以在上面检索到相关信息。据数据统计&#xff0c;每月约有4亿人使用Facebook Marketplace功能&#xff0c;潜力巨大&#xff0c;为商家提供了广阔的商机。然而&…

Java集成开发环境(IDE)之 => “IntelliJ IDEA“ 安装

一、软件介绍 IntelliJ IDEA 是一款由 JetBrains 公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它主要用于 Java 语言的开发&#xff0c;但同时也支持多种其他编程语言&#xff0c;如 Kotlin、Groovy、Scala、Python、Ruby、PHP、JavaScript、TypeScript 等…

Linux创建虚拟磁盘并分区格式化

快速创建一个虚拟磁盘 你可以通过以下步骤在Linux上虚拟一个磁盘&#xff0c;并将其挂载到 /mnt/ 目录下&#xff1a; 步骤 1: 创建一个虚拟磁盘文件 使用 dd 命令创建一个虚拟磁盘文件&#xff08;例如大小为1GB&#xff09;&#xff1a; dd if/dev/zero of/root/virtual_…

算力服务器和GPU服务器的区别是什么?

随着互联网科技的快速发展&#xff0c;服务器的类型也变得多种多样了&#xff0c;今天小编就来为大家介绍一下算力服务器和GPU服务器还有他们之间的区别是什么&#xff1f; 算力服务器通常是指具有着较高计算能力的服务器&#xff0c;算力服务器一般都是用于处理大量的计算任务…

MFC工控项目实例之十二板卡测试信号输出界面

承接专栏《MFC工控项目实例之十一板卡测试信号输入界面》 1、在BoardTest.h文件中添加代码 CButtonST m_btnStart[16],m_btnStart_O[16];2、在BoardTest.cpp文件中添加代码 UINT No_IDC_CHECK_O[16] {IDC_CHECK16,IDC_CHECK17,IDC_CHECK18,IDC_CHECK19,IDC_CHECK20,IDC_CH…

Android-10分区存储介绍及百度APP适配实践(1)

1.2 应用数据保护: 添加外部存储应用私有目录文件访问限制&#xff0c; 应用即使申请了存储权限也不能访问其他应用外部存储私有目录文件 1.3 用户数据保护&#xff1a; 添加pdf、office、doc等文件的访问限制&#xff0c;用户即使申请了存储权限也不能访问其他应用创建的pd…

好用的 Markdown 编辑器组件

ByteMD bytedance/bytemd: ByteMD v1 repository (github.com) 这里由于我的项目是 Next&#xff0c;所以安装 bytemd/react&#xff0c; 阅读官方文档&#xff0c;执行命令来安装编辑器主体、以及 gfm&#xff08;表格支持&#xff09;插件、highlight 代码高亮插件&#xf…

Nacos1.X中对NacosNamingService的实现

NacosNamingService Nacos Client包中的NamingService实现类为NacosNamingService&#xff0c;通过封装好的SDK供用户使用&#xff0c;来调用nacos对外暴露的OpenAPI SDK方式只是提供了一种访问的封装&#xff0c;在底层仍然是基于HTTP协议完成请求的。 NamingService提供了…

CleanClip for mac(苹果电脑剪切板管理器)

CleanClip 是一款为 Mac 设计的强大剪贴板管理工具&#xff0c;它能够显著提升你的工作效率和生产力。无论是在日常办公中还是进行创意设计&#xff0c;CleanClip 都能帮助你更轻松地管理和使用剪贴板内容。让我们一起来探索一下这个功能丰富的软件吧&#xff01; 下载地址&am…

快手视频怎么去水印保存到手机?

在这个信息爆炸的时代&#xff0c;短视频已成为我们日常生活中不可或缺的一部分。而作为国内知名的短视频平台&#xff0c;快手凭借其庞大的用户群体和海量的优质内容&#xff0c;成为了很多人娱乐、学习甚至工作的主要来源。但是有时候&#xff0c;我们会发现&#xff0c;想要…

Minio笔记-Centos搭建Minio

下载 Minio wget https://dl.min.io/server/minio/release/linux-amd64/minio 赋予执行权限 chmod x minio 创建存储目录 mkdir /data 运行 Minio ./minio server /data 默认端口为9000 访问 Minio 控制台&#xff1a;在浏览器中输入 http://your-server-ip:9000 默认…

通过 Sniper Links 提高您的电子邮件确认率

通过使用狙击链接重定向用户到只显示确认邮件的收件箱搜索&#xff0c;GrowthDesign 将他们的邮件确认率提高了 12%&#xff0c;从而增加了数千个已完成的注册。 目录 简要概述营销策略是什么&#xff1f;结果如何&#xff1f;如何实施为什么有效&#xff1f;获取更多类似策略…

App结合3D形象的技术实现选择

在为App添加3D人物交互效果时&#xff0c;可以采用多种技术&#xff0c;具体选择取决于你的目标平台&#xff08;iOS、Android、跨平台&#xff09;以及项目的复杂性和需求。 以下是几种常用技术及其特点&#xff1a; 游戏引擎技术 游戏引擎提供了强大的3D图形渲染和交互功能&…

LeetCode之滑动窗口

209. 长度最小的子数组 class Solution {// 方法 minSubArrayLen 接收一个整数 s 和一个整数数组 nums// 返回和大于或等于 s 的最小子数组长度public int minSubArrayLen(int s, int[] nums) {int n nums.length; // 获取数组的长度// 如果数组为空&#xff0c;直接返回 0if…

【机器人建模和控制】读书笔记

机器人建模和控制——马克斯庞 A. x 1 0 x 1 ∙ x 0 x^0_1x_1\bullet x_0 x10​x1​∙x0​&#xff0c;其实就是&#xff1a; 1&#xff09; x 1 x_1 x1​轴向量在 O 0 O_0 O0​系下的坐标 2&#xff09;在 x 0 x_0 x0​轴上的投影 3&#xff09;坐标变换矩阵的 R 1 0 R_1…

redis的 stream数据类型实现 消息队列?

redis的 stream数据类型实现 消息队列&#xff1f; redis的消息队列可以通过&#xff1a; PUB/SUB&#xff0c;订阅/发布模式&#xff1a;缺点是发布订阅模式是无法持久化的&#xff0c;如果出现网络断开、Redis 宕机等&#xff0c;消息就会被丢弃&#xff1b; 使用列表 List…

大模型微调:RHLF与DPO浅析

大模型应用性能的提升不仅在于其预训练&#xff0c;而微调的作用也非常显著。对于多数从事大模型应用领域的团队而言&#xff0c;微调是一个核心的工作之一&#xff0c;为专门任务完善大模型并确保其产出符合我们的预期。 1. 关于微调 微调涉及调整预训练的LLM &#xff0c;以更…

50projects50days案例代码分析学习、效果,Html+CSS+JavaScript小案例

案例来源于&#xff1a;https://github.com/bradtraversy/50projects50days&#xff0c;部分资源需要科学上网加载使用&#xff0c;往后不再赘述。 合集链接&#xff0c;欢迎订阅&#xff1a; https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzkwODY2OTA5NA&actiongetal…