jmeter压测学习36-请求body自动签名带上sign参数

前言

接口请求body带有sign签名参数,sign签名是根据请求body除去sign本身参数后,拼接请求参数最后md5加密生成的。
使用 jmeter 测试接口,我们希望在请求之前修改 post body 里面的 sign 参数的值为签名的值。

sign签名

签名一篇的实现方式是添加 BeanShell 预处理程序,生成sign值,设置一个变量,然后在请求的body里面引用变量。

可以参考前面这篇https://www.cnblogs.com/yoyoketang/p/14229289.html
接下来再讲另外一种实现方式,在BeanShell 预处理程序先获取请求的body,签名后给sign参数重新赋值,然后发送新的请求body,整体实现思路如下
1.先获取请求body值
2.body转JSONObject对象
3.根据sign签名规则,对JSONObject对象遍历取值,然后排序
4.排序后拼接签名key,生成一个新的字符串
5.md5加密,得到sign签名值
6.给jsonObject对象添加sign属性
7.JSONObject 转json字符串
8.给请求的body重新赋值

在发送请求之前添加上面功能的预处理,就可以实现body参数自动签名了

BeanShell 预处理程序

HTTP请求样本在body里面可以不用加签名sign参数

添加 BeanShell 预处理程序

整体代码实现如下

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.Argument;
import org.json.JSONObject;
import org.json.JSONArray;
import org.apache.commons.codec.digest.DigestUtils; //导入md5加密的包
// 作者-上海悠悠 QQ交流群:717225969
// blog地址 https://www.cnblogs.com/yoyoketang/

Arguments arguments = sampler.getArguments();
Argument arg = arguments.getArgument(0);
// 1.获取请求body值
String body = arg.getValue();
log.info(body);

// 2.body转json对象
JSONObject jsonObject = new JSONObject(body);
String user = jsonObject.getString("username");
String psw = jsonObject.getString("password");
log.info(user);

//3.获取到的json对象去除sign本身参数,拼接参数,排序,拼接key
// 这段暂时还不会用java代码全自动实现
String a = "username" + user;
log.info(a);
String b = "password" + psw;
log.info(b);
String key = "12345678";
log.info(key);

// 4.排序后拼接签名key字符串
c = b+a+key;
log.info(c);

// 5.md5加密,得到sign签名值
String md5_after = DigestUtils.md5Hex(c); // md5加密
log.info(md5_after);

// 6.给jsonObject对象添加sign参数
jsonObject.put("sign", md5_after);

// 7.JSONObject 转字符串
String postData = jsonObject.toString();
log.info(postData);

// 8.重新赋值请求的body参数
arg.setValue(postData);

运行后的部分日志

2021-01-04 22:31:15,783 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2021-01-04 22:31:15,786 INFO o.a.j.u.BeanShellTestElement: {"username": "test",
"password": "123456",
"mail": ""}
2021-01-04 22:31:15,788 INFO o.a.j.u.BeanShellTestElement: test
2021-01-04 22:31:15,788 INFO o.a.j.u.BeanShellTestElement: usernametest
2021-01-04 22:31:15,788 INFO o.a.j.u.BeanShellTestElement: password123456
2021-01-04 22:31:15,789 INFO o.a.j.u.BeanShellTestElement: 12345678
2021-01-04 22:31:15,790 INFO o.a.j.u.BeanShellTestElement: password123456usernametest12345678
2021-01-04 22:31:15,791 INFO o.a.j.u.BeanShellTestElement: 1aca01806e93bb408041965a817666af
2021-01-04 22:31:15,791 INFO o.a.j.u.BeanShellTestElement: {"password":"123456","mail":"","sign":"1aca01806e93bb408041965a817666af","username":"test"}
2021-01-04 22:31:15,929 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1

查看结果树

查看结果树运行结果请求body会带上sign值

响应结果是成功的

2021年第六期《python接口自动化+测试开发》课程,1月9号开学(火热报名中!)

本期上课时间:1月9号-4月18号,每周六、周日晚上20:30-22:30

(0)

相关推荐

  • RestTemplate post请求

    以前一开始用原生的http请求,那叫一个累,后来找到一个第三方的工具包,用起来是真的舒服,不过有一说一,第三方工具包依赖性真的强,除非和组长商量过,不然能少用,还是少用点.话说搞微服务的肯定少不了和H ...

  • jmeter压测学习37-请求头部自动签名带上X-sign参数

    前言 接口请求 body 带有 sign 签名参数,sign 签名是根据请求 body 除去 sign 本身参数后,拼接请求参数最后 md5 加密生成的. 前面一篇是把 sign 前面参数放到请求的 ...

  • jmeter压测学习47-发soap请求测试webservice接口

    前言 jmeter3 的版本可以新建一个SOAP/XML-RPC Request 的请求,直接测试webservice的接口. jmeter5.1.1 版本已经去掉了自带的SOAP/XML-RPC R ...

  • jmeter压测学习13-添加配置元件之HTTP请求默认值

    前言 在使用jmeter测接口的时候,当我们的接口数量越来越多的时候,在每个接口里面都需要添加服务器ip和端口. 当测试环境的ip和端口发生改变时,需一个个去修改这时候去维护接口就很麻烦,我们希望有个 ...

  • jmeter压测学习39-获取post请求x-www-form-urlencoded格式的数据

    前言 post请求的参数有一些是json格式,也有一些是x-www-form-urlencoded格式,前面讲签名的时候获取到post请求的是json格式. 本篇继续讲x-www-form-urlen ...

  • jmeter压测学习2-linux运行jmeter环境

    前言 使用jmeter做压测的时候,在windows上不太稳定,所有一直在linux服务器上使用jmeter做压力测试. 本篇记录下linux上搭建jmeter环境,以及运行jmeter脚本,查看报告 ...

  • jmeter压测学习5-XPath提取器

    前言 有些web项目是前后端不分离的,返回的内容不是那种纯进口返回json格式,返回的是一个HTML页面. 并且有些参数是隐藏在html里面的,需要先从html页面中取出隐藏参数,如:csrfmidd ...

  • jmeter压测学习4-正则表达式提取

    前言 上一个接口返回的token作为下个接口的入参,除了前面一篇讲到的用json提取器提取,也可以用正则提取. json提取器只能提取json格式的数据,正则可以匹配任意的返回. 我现在有一个登陆接口 ...

  • jmeter压测学习3-提取json数据里面的token参数关联

    前言 现在很多接口的登录是返回一个json数据,token值在返回的json里面,在jmeter里面也可以直接提取json里面的值. 上一个接口返回的token作为下个接口的入参. 案例场景 我现在有 ...

  • jmeter压测学习7-登录参数化(CSV 数据文件设置)

    前言 我们在压测登录接口的时候,如果只用一个账号去设置并发压测,这样的结果很显然是不合理的,一个用户并发无法模拟真实的情况. 如果要压测登录接口,肯定得准备几百,甚至上千的账号去登录,测试的结果才具有 ...