Jmeter Beanshell解决接口验签
实现思路
一.实现签名类,打包成jar包,用idea导出这个jar包和相关依赖包(实现需知道接口的签名规则)
二.将相关jar包放到jmeter目录下的/lib/ext文件夹下
三.配置好接口请求基本信息(协议,服务器地址,请求资源路径,请求方式 ,请求参数)
四.添加http服务请求beanshell脚本,将计算出来的签名存为jmeter参供接口请求使用
五.添加断言,运行脚本,在查看结果树中查看结果
六.进行接口关联,实现链路测试
具体详解
一:1.实现签名类,将签名代码调试通过
2.IDEA-生成jar包并打出jar包
1.在项目菜单栏,选择“File>Project Structure”
2.选择:Artifacts >"+">JAR>From Module with dependency
3.在弹出来的框框中设置导出信息,点击OK (META-INF/MANIFEST.MF不要设置成默认的,设置成项目的根目录)
关于 JAR files from libraries的两个选项:
选中第一个的话,打完包后是一个jar包
选中第二个的话,打完包后是一个jar包,外带你项目所用的jar包,推荐第二个
4.在这个页面设置导出地址等信息,注意要勾上“include in project build”,点击“OK”
5.然后在主菜单中点击“Build>Build Artifacts ”(图1),然后选择要build的jar包点击“Build”(图2) 即成功导出jar包,然后去上一步“Output directory”中即可查看到该jar包(图3)
二:将jar包放到jmeter目录下的/lib/ext文件夹下
三:1.添加配置元件-http请求默认值,设置协议,服务器地址,端口号,编码
不在http请求里配置是为了设置了一个全局的值,切换环境的话只需要改请求默认值里的信息
2.添加http请求,设置请求方式,路径,参数
参数需要参数化处理,将参数写在前置处理器-用户参数里,方便管理
3.添加全局用户参数,存放通用参数
四:1.在http请求里添加beanshell预处理程序
BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
BeanShell是用Java写成的,一个小型的、免费的、可以下载、嵌入式的Java源代码解释器,具有对象脚本的特性;
2.导入jar包
3.定义一个list,用来存放参数,添加参数,添加参数有两种方式
传常量:当参数是短期不变的值或者不需要接口关联时可使用这种方式
传变量:当参数是会时常变化,需要从上一个接口返回中获取时使用这种方式(推荐)
vars.get(String key),从jmeter中获得变量值
4.调用签名类
5. 将签名返回
vars.put(String key, String value),数据存到jmeter变量中
五:1.添加断言
2.运行脚本,在查看结果树中查看结果
六:1.从获取session_token接口,login接口中分别获取session_token,access_token给其他接口调用,实现接口关联
除了获取token类数据,也可以提取必要的业务参数,作为下一个接口的入参实现链路测试
遇到的一些问题
1.jmeter的时间戳函数使用
在使用jmeter做接口测试的时候,经常会要用到日期这种函数,让系统自动生成一些格式化的数据,方便接口测试,jmeter自身就带有时间戳的函数
__time:获取时间戳、格式化时间
(1)、${__time(yyyy-MM-dd HH:mm:ss:SSS,time)} :格式化生成时间格式 2018-10-26 11:08:23:635
(2)、${__time(,)}:默认该公式精确到毫秒级别, 13位数 1527822855323
(3)、${__time(/1000,)}:该公式精确到秒级别, 10位数 1527822871
(4)、${__time(yyyy-MM-dd,)}:该公式格式化生成的时间为:2018-10-26
(5)、${__time(yyMMdd,)}:该公式格式化生成的时间为:181026
我们用到的是第三种。
2.密码通过MD5加密
3.环境参数
4.post请求的接口以json方式提交(Content-Type:application/json),参数需要写到消息体数据里;
5.http请求报错"Illegal character in query at index 303"的解决方法
产生原因:url中有汉字或特殊字符(非字母和数字的字符),没有转码。
解决办法:在HTTP Request中将带有汉字特殊字符的参数后面的Encode勾选上,进行转码,再运行即可。
6.Error invoking bsh method: eval In file: 报错
最终原因:Map方法中不能指定数据类型,List中同理。