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

Jmeter自动化实战

前言

由于系统业务流程很复杂,在不同的阶段需要不同的数据,且数据无法重复使用,每次造新的数据特别繁琐,故想着能不能使用jmeter一键造数据

创建录制模板

录制模板参考
首先创建一个录制模板
因为会有各种请求头,cookies,签名,认证信息等原因,导致手动复制粘贴的的全面导致接口调用失败,当然如果你对系统特别熟悉,可以忽略这个步骤

录制后可以复制请求到线程组中,这样就可以直接复制
在这里插入图片描述

新增线程组

在这里插入图片描述
修改线程组名称
在这里插入图片描述

给线程组添加用户定义变量

在这里插入图片描述
定义多个用户定义变量,给不同的模块使用
在这里插入图片描述

新增查看结果树

在这里插入图片描述

新增测试片段

在这里插入图片描述
在这里插入图片描述
上图测试片段,按照不同的模块创建不同的片段,因为执行的时候,我们只需要把数据流转到某个阶段就行了, 创建测试片段,可以对不同模块的接口统一管理,不需要禁用这个测试片段就行了
在这里插入图片描述

新增http请求

在测试片段下新增http请求

在这里插入图片描述

对http请求的处理

对http请求会遇到以下这些问题

  • 登入
  • 添加请求头,认证信息,签名,随机数等
  • 请求参数加密
  • 响应结果解析并应用到下一次请求
  • 请求的执行顺序
  • 响应断言

登入

登入http请求
在这里插入图片描述

添加前置处理器JSR223 PreProcessor
用于获取时间戳,随机数,生成签名
在这里插入图片描述
在这里插入图片描述
下面含有md5加密,可参考Jmeter使用js对入参使用MD5加密

load("md5.js")
// 时间戳
var timestamp = new Date().getTime();
// 随机数
var nonce = Math.round(Math.random() * 100000);
// 生成签名
var signature =  hex_md5(timestamp + "=" + nonce + "function");
vars.put("timestamp", timestamp);
vars.put("nonce", nonce);
vars.put("signature", signature);

添加http请求头
在这里插入图片描述
在这里插入图片描述
添加JSON提取器获取登入后的token信息

解析返回参数,可参考Jmeter对请求结果进行解析

通过下面的json提取器可以获取到登入后返回的token,这个token是一个变量,可以用于下一次请求
在这里插入图片描述
在查询接口的请求头中使用token
在这里插入图片描述

请求参数加密

可参考Jmeter使用js对入参使用MD5加密

响应结果解析并应用到下一次请求

Jmeter对请求结果进行解析

请求的执行顺序

如何保证请求的执行顺序呢?

http请求是可以拖动移动顺序的,展示的顺序,就是执行的先后顺序,建议命名的时候加上需要,这样在多个接口同事执行的时候能够快速的定位到时哪一个接口
在这里插入图片描述

响应断言

在这里插入图片描述

整理流程展示

在这里插入图片描述

特殊场景处理

场景1:附件上传

参考:jmeter附件上传

场景2:当前接口需要需要上一个接口的返回值

第一个接口,当创建一个项目后,返回一个项目id
第二个接口,需要获取项目id作为入参去提交项目

创建接口
创建入参
在这里插入图片描述
JSR233 获取请求头信息
在这里插入图片描述
设置请求头
在这里插入图片描述
JSON提取器,获取创建成功的项目id
在这里插入图片描述

延迟3s,保证接口调用的先后顺序
在这里插入图片描述
提交接口

在这里插入图片描述

场景3:从form表单提取参数,作为下一个接口的入参

前一个接口的JSR223 后置处理器

// 获取响应数据
var response = prev.getResponseDataAsString();
// 解析 JSON 数据
var data = JSON.parse(response);
// 获取变量(这是个对象,不是一个字符串)
var designPeoples = data.data.designPeoples;
// 项目名称
var itemName = data.data.item.name;
var itemId = data.data.item.id;
// 使用 for 循环遍历数组并修改每个元素
for (var i = 0; i < designPeoples.length; i++) {
    designPeoples[i].linkusername = "诸葛亮";
    designPeoples[i].linkway = "13888888888";
}
vars.put("itemId", itemId);
vars.put("itemName", itemName);
// 应为是一个对象,使用JSON.stringify把对象转化为字符串,在使用的时候应该为 ${designPeoples} 而不是 '${designPeoples}' 不需要引号
vars.put("designPeoples", JSON.stringify(designPeoples));

后一个接口的入参

{
	"item": {
		"id": "${itemId}",
		"mainid": "${mainId}",
		"name": "${itemName}",
		"type": "项目"
	},
	"designPeoples": ${designPeoples}
}

http://www.kler.cn/news/367232.html

相关文章:

  • 知识见闻 - 磁力片原理
  • 【Spring MVC】响应结果和设置
  • k8s可以部署私有云吗?私有云部署全攻略
  • Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口
  • 383. 赎金信 C#实现
  • SEO基础:什么是LSI关键词?【百度SEO优化专家】
  • 使用Python实现智能火山活动监测模型
  • 241026-RHEL如何以root身份卸载Docker
  • 改进YOLOv8系列:引入低照度图像增强网络Retinexformer | 优化低光照目标检测那题
  • 06. 函数
  • C#里使用最高性的网络通讯例子
  • echarts实现 水库高程模拟图表
  • Qt的信号槽机制学习一
  • k8s 部署 mysql 故障恢复记录
  • 【ESP32S3】VSCode 开发环境搭建
  • 打卡图论10.24
  • Qt元对象系统 —— 属性系统
  • 【论文阅读】Tabbed Out: Subverting the Android Custom Tab Security Model
  • 6.stm32 OLED显示屏
  • spring响应式编程
  • Python 流程控制专题:pass 与接口
  • 安全知识见闻-编程语言
  • Java面试题十一
  • idea历史版本下载
  • Redis 过期策略 总结
  • 过采样与欠采样技术原理图解:基于二维数据的常见方法效果对比