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

JMeter-Websocket接口自动化

JMeter-Websocket接口自动化

        • 结构图
    • 1.准备
    • 2.实现思路
      • 2.1 通过HTTP请求获取token
      • 2.2 设置循环控制、断言变量
      • 2.3 建立WebSocket连接
      • 2.4 设置While循环控制读取CSV文件数据
        • 2.4.1 csv文件设置,一般这样设置参数即可
          • 变量名称:message,expected_steps
      • 2.5 设置websocket请求体数据
      • 2.6 设置循环来保证接收到需要的响应(排除ping响应的影响)
        • JSR223后置处理脚本(从正确响应中拆解出需要的数据):
        • JSR223断言(从正确响应中拆解出需要的数据):
      • 2.7 进行安全处理,关闭websocket连接和确保循环终止(保险)
    • 3.csv文件格式
    • 4.结果查看和输出

结构图

在这里插入图片描述

1.准备

提前安装好JMeter Plugins Manager,后续用的到部分组件需要通过插件管理器安装,比如JSR断言、WebSocket Open Connection等组件

2.实现思路

2.1 通过HTTP请求获取token

token有过期时间,每次手动设置较为麻烦,故通过组件每次运行获取新的token

在这里插入图片描述

2.2 设置循环控制、断言变量

也有每次循环重置变量的作用,避免变量结果复用

在这里插入图片描述

2.3 建立WebSocket连接

WebSocket连接实在HTTP请求的基础上建立的,也就是在HTTP请求中高速对方,我要和你建立websocket连接,所以必要的HTTP请求头参数要带上

在这里插入图片描述
在这里插入图片描述

2.4 设置While循环控制读取CSV文件数据

2.4.1 csv文件设置,一般这样设置参数即可

在这里插入图片描述

变量名称:message,expected_steps

对应vars中的变量,变量值是根据分隔带JMeter自动处理的,变量名称 数量和分隔后的变量值 数量不对应也没影响,两者缺少的值会忽略或者设置为空值

2.5 设置websocket请求体数据

在这里插入图片描述

2.6 设置循环来保证接收到需要的响应(排除ping响应的影响)

在这里插入图片描述

JSR223后置处理脚本(从正确响应中拆解出需要的数据):

脚本是类似C语言的执行模式,方法在前,调用在后

import org.json.JSONObject;
import org.json.JSONArray;// 解析read的响应数据为json格式
public JSONObject parseResponse(String response) {try {JSONObject jsonResponse = new JSONObject(response);return jsonResponse;} catch (Exception e) {log.info("解析read结果失败: " + e.getMessage());return null;}
}// 判断action是否为chat
public Boolean processAction(JSONObject jsonResponse) {try{if (jsonResponse.has("action") && jsonResponse.get("action").toString().equals("chat")) {return true;} else {return false;}}catch (Exception e) {System.err.println("processAction发生异常: " + e.getMessage());return false;}	
}// 获取read结果的steps
public List<String> getStepsList(JSONObject jsonResponse){// 解析实际步骤List<String> actualSteps = new ArrayList<>();try{JSONArray plan = jsonResponse.getJSONObject("xxxx").getJSONObject("data");for (int i=0; i<plan.length(); i++) {JSONArray steps = plan.getJSONObject(i).getJSONArray("steps");for (int j=0; j<steps.length(); j++) {actualSteps.add(steps.getJSONObject(j).getString("xxxx"));}}}catch (Exception e) {log.info("获取steps失败: " + e.getMessage());}return actualSteps;
}// 获取csv文件中的预期步骤
public List<String> getExpectedStepsList(){return Arrays.asList(vars.get("expected_steps").split(";"));
}// 比较预期步骤和实际步骤是否符合
public Boolean getComparisonResult(List<String> actualSteps,List<String> expectedSteps){//比较方法return actualSteps.equals(expectedSteps);
}// 获取原始响应
String response = prev.getResponseDataAsString();// read的响应数据转为json格式
JSONObject jsonResponse = parseResponse(response);// 仅处理action:chat的响应
if (processAction(jsonResponse)) {// 解析实际步骤List<String> actualSteps = getStepsList(jsonResponse);// 获取预期步骤List<String> expectedSteps = getExpectedStepsList();// 对比数据Boolean temp = getComparisonResult(actualSteps,expectedSteps);// 实际与预期不符if(!temp){// 存储实际、预期数据vars.putObject("actualSteps", actualSteps);vars.putObject("expectedSteps", expectedSteps);// 标记需要断言vars.put("isAsser","true");}vars.put("isValidResponse", "true"); // 标记有效响应(停止读取流数据,进入下个案例循环)
}
JSR223断言(从正确响应中拆解出需要的数据):
// 断言
if ("true".equals(vars.get("isAsser"))) {// 获取测试数据List<String> expectedSteps = vars.getObject("expectedSteps");List<String> actualSteps = vars.getObject("actualSteps");String msg = vars.get("message");String actualStepsString = actualSteps.toString();String expectedStepsString = expectedSteps.toString();AssertionResult.setFailure(true); // 标记断言失败AssertionResult.setFailureMessage("案例 " + msg + " 预期不符\n" + "\t实际步骤:"+ actualStepsString + "\n" + "\t预期步骤:" + expectedStepsString);// 添加调试信息log.info("当前案例: {},与预期不符合", vars.get("message"));log.info("实际步骤列表: {}", actualSteps.toString());log.info("预期步骤列表: {}", expectedSteps.toString());
}

2.7 进行安全处理,关闭websocket连接和确保循环终止(保险)

在这里插入图片描述

3.csv文件格式

在这里插入图片描述

4.结果查看和输出

在这里插入图片描述

http://www.xdnf.cn/news/581833.html

相关文章:

  • Python 学习笔记
  • React19 项目开发中antd组件库版本兼容问题解决方案。
  • ubuntu中上传项目至GitHub仓库教程
  • 【数据结构与算法】LeetCode 每日三题
  • LeetCode 3356.零数组变换 II:二分查找 + I的差分数组
  • 精益数据分析(78/126):问题-解决方案画布的实战应用与黏性阶段关键总结
  • 华为云Flexus+DeepSeek征文 | 基于ModelArts Studio 的 DeepSeek API 实现行业深度搜索和分析
  • 平时使用电脑,如何去维护
  • VideoMAE论文笔记
  • 游戏引擎学习第305天:在平台层中使用内存 Arena 的方法与思路
  • 模拟退火算法求解01背包问题:从理论到实践的完整攻略
  • IPv4 地址嵌入 IPv6 的前缀转换方式详解
  • AUTOSAR AP 入门0:AUTOSAR_EXP_PlatformDesign.pdf
  • (高级)高级前端开发者指南:框架运用与综合实战
  • 《量子计算实战》PDF下载
  • 工业 / 农业 / AR 场景怎么选?Stereolabs ZED 双目3D相机型号对比与选型建议
  • 融合蛋白质语言模型和图像修复模型,麻省理工与哈佛联手提出PUPS ,实现单细胞级蛋白质定位
  • 边缘计算正在重新定义物联网的未来——你的设备还在“等云“吗?⚡
  • Java 大视界 -- Java 大数据机器学习模型在金融客户生命周期价值预测与营销策略制定中的应用(262)
  • java jdbc执行Oracle sql文件
  • 鸿蒙 HarmonyOS NEXT 系统 Preference 首选项使用全解析
  • Antd中Upload组件封装及使用:
  • 【Redis】三、在springboot中应用redis
  • python实现web请求与回复
  • 水库大坝、坝肩混凝土面板变形及岸坡位移多断面多测点安全监测新途径——变焦视觉位移监测仪
  • 在线时间戳(Unix TimeStamp)转换器
  • 739. 每日温度
  • 单片机如何快速实现查看实时数据
  • [Git] 基本操作及用户配置
  • CSR矩阵 矩阵压缩