软件测试技能,JMeter压力测试教程,请求body自动签名带上sign参数(二十一)

目录:导读

一、前言

接口请求body带有sign签名参数,sign签名是根据请求body除去sign本身参数后,拼接请求参数最后md5加密生成的

使用 jmeter 测试接口,我们希望在请求之前修改 post body 里面的 sign 参数的值为签名的值

二、sign签名

签名一篇的实现方式是添加 BeanShell 预处理程序,生成sign值,设置一个变量,然后在请求的body里面引用变量软件测试技能,JMeter压力测试教程,请求body自动签名带上sign参数(二十一)
可以参考前面这篇:https://blog.csdn.net/x2waiwai/article/details/122843324

接下来再讲另外一种实现方式,在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参数软件测试技能,JMeter压力测试教程,请求body自动签名带上sign参数(二十一)
添加 BeanShell 预处理程序软件测试技能,JMeter压力测试教程,请求body自动签名带上sign参数(二十一)
整体代码实现如下

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加密的包


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值软件测试技能,JMeter压力测试教程,请求body自动签名带上sign参数(二十一)
响应结果是成功的软件测试技能,JMeter压力测试教程,请求body自动签名带上sign参数(二十一)


软件测试技能,JMeter压力测试教程,请求body自动签名带上sign参数(二十一)软件测试技能,JMeter压力测试教程,请求body自动签名带上sign参数(二十一) 感谢每一个认真阅读我文章的人!!! 如果下面这些资料用得到的话可以直接拿走:

1、自学开发或者测试必备的完整项目源码与环境

2、测试工作中所有模板(测试计划、测试用例、测试报告等)

3、软件测试经典面试题

4、Python/Java自动化测试实战.pdf

5、Jmeter/postman接口测试全套视频获取

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。如果在学习或工作中遇到问题可以直接点击此链接进群询问,群里也会有大神帮忙解答,也可以手动添加群号 743262921 备注222

上一篇:求1+(1+2)+(1+2+3)....+(1+2..+100)的结果


下一篇:期望