Jmeter自动化实战

前言

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

创建录制模板

录制模板参考

首先创建一个录制模板

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

录制后可以复制请求到线程组中,这样就可以直接复制

新增线程组

修改线程组名称

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

定义多个用户定义变量,给不同的模块使用

新增查看结果树

新增测试片段


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

新增http请求

在测试片段下新增http请求

对http请求的处理

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

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

登入

登入http请求

添加前置处理器JSR223 PreProcessor

用于获取时间戳,随机数,生成签名

下面含有md5加密,可参考Jmeter使用js对入参使用MD5加密

java 复制代码
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 后置处理器

javascript 复制代码
// 获取响应数据
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));

后一个接口的入参

javascript 复制代码
{
	"item": {
		"id": "${itemId}",
		"mainid": "${mainId}",
		"name": "${itemName}",
		"type": "项目"
	},
	"designPeoples": ${designPeoples}
}
相关推荐
Maggie_ssss_supp16 分钟前
Linux-Percona XtraDB Cluster (PXC)集群部署实战
linux·运维·服务器
十月南城27 分钟前
压测方法论——目标、场景、指标与容量评估的闭环
运维·web安全·ci/cd·微服务·云计算
吃花椒的冰冰1 小时前
ubuntu自动检测断网重联
运维·服务器
刘哥测评技术zcwz6261 小时前
希音shein自养号测评怎么做,有哪些技术要求
运维·服务器·网络
“αβ”1 小时前
TCP相关实验
运维·服务器·网络·c++·网络协议·tcp/ip·udp
前端大波2 小时前
vue3的自动化路由(unplugin-vue-router)
javascript·vue.js·自动化
etp_2 小时前
连击非第一击无伤害
运维·nginx
历程里程碑2 小时前
Linux 3 指令(3):进阶指令:文件查看、资源管理、搜索打包压缩详解
linux·运维·服务器·c语言·数据结构·笔记·算法
十六年开源服务商2 小时前
外贸WordPress用户反馈分析与运营维护
运维·服务器·数据库
vHXIxsckCTh2 小时前
LabVIEW中英文虚拟键盘源程序:便捷输入的利器
jmeter