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

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());
}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • golang学习笔记11——Go 语言的并发与同步实现详解
  • 信号与槽,QMainWindow中常用类的使用
  • SpringCache源码解析(三)——@EnableCaching
  • Vue 中实现视频播放的艺术
  • git使用手册
  • 离线安装NuGet组件方法
  • 大学生租房平台:SpringBoot技术实现详解
  • Anthropic 的 Claude AI 如何可能超过 OpenAI 的 ChatGPT?
  • 网络拓扑结构介绍
  • C++继承问题
  • three.js线框模式
  • 如果 Google 解雇 Go 团队怎么办?
  • 信息架构的战略视角:驱动数字化转型的设计原则与实践创新
  • Spring事务失效场景及解决方法
  • MATLAB实现PID参数自动整定
  • Elasticsearch 参考指南(升级前重新索引)
  • extract-text-webpack-plugin用法
  • gf框架之分页模块(五) - 自定义分页
  • JAVA 学习IO流
  • JavaScript 基本功--面试宝典
  • JavaScript设计模式与开发实践系列之策略模式
  • log4j2输出到kafka
  • nginx 配置多 域名 + 多 https
  • React-Native - 收藏集 - 掘金
  • Redux系列x:源码分析
  • sublime配置文件
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 产品三维模型在线预览
  • 从零开始在ubuntu上搭建node开发环境
  • 关于Java中分层中遇到的一些问题
  • 设计模式(12)迭代器模式(讲解+应用)
  • 什么是Javascript函数节流?
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 移动端 h5开发相关内容总结(三)
  • 找一份好的前端工作,起点很重要
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​数据结构之初始二叉树(3)
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #etcd#安装时出错
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #考研#计算机文化知识1(局域网及网络互联)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2)Java 简介
  • (21)起落架/可伸缩相机支架
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Matlab)使用竞争神经网络实现数据聚类
  • (pycharm)安装python库函数Matplotlib步骤
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (一)SvelteKit教程:hello world
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • ***php进行支付宝开发中return_url和notify_url的区别分析