老鬼的博客 来都来啦,那就随便看看吧~
jmeter如何压测需要token认证的接口
发布于: 2024-07-04 更新于: 2024-07-04 分类于:  阅读次数: 

一:场景

1
2
3
目前很多接口的业务场景是先登录才能访问,大部分接口使用的是token令牌的机制,
关于此类的接口如果要压测,必须要先进行登录,然后把登录返回的token携带到后
续的接口中,下面就介绍一下jmeter如何进行这些操作。

二:设置方法

2.1 实现思路

1
2
3
4
5
6
1.通过JSON提取器获取到token登录接口的token值
2.通过BeanSheel编写java脚本将JSON提取器捕获的值写入到token.csv文件中
3.手动加入token.csv的文件
4.后续压测使用token.csv的token值即可

此方法再每次重新生成token.csv文件的时候,需要将token.csv引入,生成好以后再加入。

2.2 登录接口返回值

1
2
3
4
5
6
{
"resCode":"200",
"resMsg":"操作成功!",
"resData":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJteURhdGFLZXkiOnsidXNlcklkIjoiMDFhMWJkZTRkZWUxNDE5ODkxYjYzNDRiZDhiMGZjNzAiLCJhY3Rpdml0eUNvZGUiOiJIRF9USElSRDpLeER2VjZXRiJ9fQ.vpDfoO8Nvtt5ApKgrE_dH41PLkFw3ma0M5ZHhr0Klm4",
"stackInfo":""
}

2.3 添加JSON提取器

1
2
3
4
5
Names of created variables:保存的变量名,后面使用${name}引用
JSON Path expressions:调试通过的json path表达式,是根据接口返回值来决定的,我这里是$.resData
Match No.(0 for Random):匹配数字(0代表随机,1代表第一个,-1代表所有)
Compute concatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值保存,名为“变量名_ALL”
Default Values:找不到时默认值

2.jpg
4.jpg

2.4 添加BeanShell后置处理程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//${code}是在code.csv文件中设置的
log.info("code:" + "${code}");
//${resToken}是再JSON提取器中获取的
log.info("token:" + "${resToken}");

//自定义全局变量
String codeKeys = props.get("codeKeys");
//如果为空则初始化空字符串
if(codeKeys == null){
codeKeys = "";
}

//判定是否已经添加过此code,如果已经添加则无需再添加
if(codeKeys.indexOf("${code}") < 0){
codeKeys = codeKeys + "${code}" + ",";
props.put("codeKeys",codeKeys);

//写入token.csv的文件
FileWriter fstream = new FileWriter("D:/jmeterProgram/actminisite/20240704_token压测/token.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write("${resToken}");
out.write("\r\n");
out.close();
fstream.close();
}

log.info("codeKeys:" + codeKeys);

3.jpg
3.jpg

2.5 添加token.csv

1
将2.4步骤中生成的token.csv加入到项目中

6.jpg

2.6 增加Header管理器

6.jpg

2.7 查看请求结果

6.jpg
6.jpg

2.8 清除token.csv以及全局变量

1
2
3
在实际压测中,我们可能生成的token有问题或者需要重新压测,当
我们已经生成过一份token.csv以后,如果在不重新打开的情况下,
需要手动去清除这些数据,所以加一个执行计划来清空数据

6.jpg

*************感谢您的阅读*************