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}
}
相关推荐
幸福指北9 小时前
我用 Tauri + Vue 3 + Rust 开发了这款跨平台网络连接查看工具PortView,性能炸裂!
运维·网络·监控
程序员杰哥10 小时前
Jmeter正则表达式提取器和JSON提取器基础用法
自动化测试·软件测试·测试工具·jmeter·正则表达式·json·测试用例
青柠代码录10 小时前
【Linux】路径区分:testdir、testdir/、testdir/*
linux·运维·服务器
Benszen12 小时前
Docker容器化解决方案全解析
运维·docker·容器
badhope12 小时前
Docker从零开始安装配置全攻略
运维·人工智能·vscode·python·docker·容器·github
mounter62512 小时前
基于MLX设备的Devlink 工具全指南与核心架构演进
linux·运维·服务器·网络·架构·kernel
RPA机器人就用八爪鱼13 小时前
RPA+AI赋能数字化办公:告别机械劳作,解锁全场景自动化
人工智能·机器人·自动化·rpa
Hi2024021713 小时前
如何从互联网上免费下载歌曲
python·自动化
xuanwojiuxin13 小时前
[linux] what‘s the kdump?
linux·运维·服务器
透明的玻璃杯13 小时前
关于QT客户端和服务器端之前状态监控
运维·服务器