Jmeter - 阿里云 APP 鉴权
背景
-
阿里云网关开启阿里云 app 鉴权后,如何使用 jmeter 进行自测?
-
什么是 BeanShell ? 百度。。。
环境部署
-
在 Jmeter 插件目录
lib/ext
下保存插件 aliyun-getway-sign.jar 。PS : 也可以指定其他目录,有兴趣可以自行研究。 -
新增一个 shell 文件夹,用于管理 BeanShell 脚本。
-
附件中包含了:阿里云鉴权插件、BeanShell 脚本, 下载
使用方法
- 创建自定义变量管理 appKey 和 appSecrect
- 全局设置信息头管理器, 非必填项
-
添加 BeanShell **前置处理程序 **(添加 ->前置处理器 -> BeanShell 预处理程序)
-
BeanShell 脚本有两种实现方法,建议第一种纯黑盒。
-
引用现有的 BeanShell 脚本 (需要指定脚本路径)
-
在 BeanShell 文件中编写脚本
-
- 正常编写测试脚本即可
备注
-
调试插件时,可以尝试在 BeanShell 中通过 addClassPath 方法直接指定 Java 帮助类,例如: addClassPath("D:\xxxx\jmeter-aliyun-gateway-sign\target\classes\");
-
所有的 BeanShell 代码都要以分号结尾
-
当你不知道对象类型时 ,log.info( xxx.getClass()); 再配合 Jmeter class 文档有奇效 。
-
BeanShell 中不要使用类似于 Map<String,Object> map = new HashMap<>(), List也一样。
-
包括引用 java 文件也不能使用泛型,jmeter 会报错:
-
Map 方法中不能指定数据类型 , 可以 Map map = new HashMap();
-
-
打包插件,需要使用 module output 默认目录
-
异常处理不完善,有兴趣的可以自行优化
扩展
-
内置变量 vars
-
采样器 sampler (HTTPSampler -> HTTPSamplerBase)
-
常用方法
//获取谓词
String method = sampler.getMethod();
log.info("method :" + method);
//获取请求路径
String path = sampler.getUrl().getPath();
log.info("path :" + path);
//sampler 里面有个getHeaderManager 可以获得请求头
HeaderManager headers =sampler.getHeaderManager();
// 打印全部的头部内容
log.info(headers.getHeaders().getStringValue());
//获取query部分
String requestQuery = sampler.getUrl().getQuery();
log.info("requestQuery :" + requestQuery);
//获取请求路径
String path = sampler.getUrl().getPath();
log.info("path :" + path);
//获取域名
String Host = sampler.getUrl().getHost();
log.info("Host :" + Host);
//获取协议
String protocol = sampler.getUrl().getProtocol();
log.info("protocol :" + protocol);