zoukankan      html  css  js  c++  java
  • 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中同理。

     

  • 相关阅读:
    正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
    jQuery + css 公告从左往右滚动
    C# process 使用方法
    存储过程与SQL的结合使用
    img标签的方方面面
    kibana 5.0.0-alpha5 安装
    es5.0 v5.0.0-alpha 编译安装
    奇怪的hosts文件
    阿里云 api 的文档拼写错误
    centos 7 systemd docker http proxy
  • 原文地址:https://www.cnblogs.com/yiweiwei/p/13602542.html
Copyright © 2011-2022 走看看