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

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

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.kler.cn/a/301470.html

相关文章:

  • Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】
  • vuex和pinia的区别
  • 《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配
  • 使用视频提升应用在 App Store 中的推广效果
  • vue之axios根据某个接口创建实例,并设置headers和超时时间,捕捉异常
  • MacOS下,如何在Safari浏览器中打开或关闭页面中的图片文字翻译功能
  • 如何实现视频数据的PES打包和传输?
  • 【JavaSE】基础学习以及简单的计算器应用程序GUI实现
  • 【Kubernetes】常见面试题汇总(十)
  • ffmpeg编译连接报错 undefined reference to `uncompress‘
  • leetcode练习 单词搜索
  • 【区块链 + 人才服务】基于区块链技术助力人才证书数字化 | FISCO BCOS应用案例
  • wordpress建立数据库连接失败 数据库删除恢复
  • 【Linux】信号的产生、保存与处理
  • 网页时装购物系统:Spring Boot技术的实际应用
  • 【双指针】N数之和
  • [SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程
  • 猫咪掉毛怎么处理?希喂、米家、范罗士宠物空气净化器用哪款?
  • Linux 删除 当前下的 mysql-8.0.31 空文件夹
  • ChatGPT的底层逻辑
  • 物联网的设计
  • ubuntu 安装 jdk
  • 【游戏杂谈】关于靠谱及不靠谱的游戏立项方式探讨
  • 大模型系列-fastgpt,ollama搭建本地知识库
  • 爬虫基础知识+豆瓣电影实战
  • 2024年六月英语四级真题及解析PDF共9页