文章目录
一:场景
目前很多接口的业务场景是先登录才能访问,大部分接口使用的是token令牌的机制,
关于此类的接口如果要压测,必须要先进行登录,然后把登录返回的token携带到后
续的接口中,下面就介绍一下jmeter如何进行这些操作。
二:设置方法
2.1 实现思路
1.通过JSON提取器获取到token登录接口的token值
2.通过BeanSheel编写java脚本将JSON提取器捕获的值写入到token.csv文件中
3.手动加入token.csv的文件
4.后续压测使用token.csv的token值即可
此方法再每次重新生成token.csv文件的时候,需要将token.csv引入,生成好以后再加入。
2.2 登录接口返回值
{
"resCode":"200",
"resMsg":"操作成功!",
"resData":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJteURhdGFLZXkiOnsidXNlcklkIjoiMDFhMWJkZTRkZWUxNDE5ODkxYjYzNDRiZDhiMGZjNzAiLCJhY3Rpdml0eUNvZGUiOiJIRF9USElSRDpLeER2VjZXRiJ9fQ.vpDfoO8Nvtt5ApKgrE_dH41PLkFw3ma0M5ZHhr0Klm4",
"stackInfo":""
}
2.3 添加JSON提取器
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.4 添加BeanShell后置处理程序
//${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);
2.5 添加token.csv
将2.4步骤中生成的token.csv加入到项目中
2.6 增加Header管理器
2.7 查看请求结果
2.8 清除token.csv以及全局变量
在实际压测中,我们可能生成的token有问题或者需要重新压测,当
我们已经生成过一份token.csv以后,如果在不重新打开的情况下,
需要手动去清除这些数据,所以加一个执行计划来清空数据
或者需要重新压测,当
我们已经生成过一份token.csv以后,如果在不重新打开的情况下,
需要手动去清除这些数据,所以加一个执行计划来清空数据