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}
}
相关推荐
藥瓿亭2 小时前
K8S认证|CKS题库+答案| 9. 网络策略 NetworkPolicy
linux·运维·docker·云原生·容器·kubernetes·cks
liuzhenghua662 小时前
Python任务调度模型
java·运维·python
黎相思2 小时前
应用层自定义协议与序列化
运维·服务器·网络
测试开发Kevin3 小时前
详解Jenkins Pipeline 中git 命令的使用方法
运维·jenkins
什么半岛铁盒3 小时前
Linux线程与进程关系及底层实现
java·linux·运维
langmeng1104 小时前
使用docker在3台服务器上搭建基于版本redis 6.x的一主两从模式
运维·redis·docker·容器·集群
jllllyuz4 小时前
如何为服务器生成TLS证书
运维·服务器·数据库
简朴-ocean4 小时前
如何删除linux空的文件夹
linux·运维·服务器
淘小白_TXB21965 小时前
Python网页自动化Selenium中文文档
python·selenium·自动化·网页自动化
leblancAndSherry5 小时前
Gitlab + Jenkins 实现 CICD
linux·运维·docker·kubernetes·gitlab·jenkins