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中同理。

 

posted @ 2020-09-02 16:43  Lucky-qq  阅读(809)  评论(0编辑  收藏  举报