jmeter通过BeanShell 脚本,实现对http请求参数的加密
Posted 真的,秋风来了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jmeter通过BeanShell 脚本,实现对http请求参数的加密相关的知识,希望对你有一定的参考价值。
jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的自动化接口测试框架。它的好还在于它是纯JAVA开发的,因此,它可以更好的跟JAVA对接,通过引入自己封装的jar文件,可以方便的实现对jmeter各种个性化需求的功能的拓展,下面以一个实际例子来说明jmeter怎么引入自己开发的java工具类来实现对http请求参数的加密处理。
在此之前,我们假设有这么一个场景:我们打算对一个http请求做接口测试,但是该请求的一些参数或http头文件信息里包含了一些加密的参数,在实际的应用中,这些加密处理是由前端或app客户端来实现的,其他接口也不会返回给我们这些加密数据。那就问题就来了,前端把参数加密传给后端,后端接口用加密的数据去做校验或其他处理,那么使用jmeter做脚本的时候,这些加密的参数该怎么办?jmeter没有提供给我们现成的加密功能,而且每个数据的加密方式可能都不一样,我们要怎么才能实现对jmeter请求的这些参数加密呢?这就需要我们使用到Beashell 脚本了。
说到jmeter 的Beanshell使用,这里我们可能会用到jmeter的这些组件:取样器中的BeanShell Sampler,配置元件:前置处理器中的BeanShell PreProcessor,后置处理器中的BeanShell PostProcessor,断言中的BeanShell断言。
接下来回到刚才的场景,http请求里的一些参数是加密的,为了使用jmeter正常发送带加密参数的http请求来测试这个http接口,我们可以给该http请求添加一个BeanShell PreProcessor,通过在BeanShell PreProcessor里实现对参数的加密。下面上具体的实例:
假设有这么一个app应用的HTTP接口,接口文档如下:
接口名称:XXX登录
接口协议:HTTP
请求方式:POST
参数类型:JSON
路径参数:phonenumber,用户手机号码
请求体参数:
device 设备信息,JSON格式
password 用户密码,密码SHA-256编码加密串数据的大写
首先,我们需要用java代码来实现SHA-256加密功能:
项目结构为com.Base64
SHA256加密代码主体:
ok,加密算法写好后,把其打包成jar文件,这里我打包的文件为:Base64URLSafe.jar ,把Base64URLSafe.jar 放到jmeter lib/ext目录下,接下来就可以在jmeter里引入这个jar包了。
jmeter脚本做法如下:
1、测试计划里引入外部jar包:
2.添加一个http取样器:
3. 给这个http取样器添加一个 前置处理器:BeanShell PreProcessor,其内容如下
接下来就可以在需要用到变量的地方引用即可,应用方法:${PASSWORD_SHA256}
运行结果如下:
可以看到, 密码123456 已结经过SHA256加密并全部转化为大写字母了。OK,相信大家可以从这个简单的例子中联想到它的很多用法,了解了这个特性,那么足够你用jmeter和java来做很多事情了,最后要说的是,本例中之所以是通过引入外部jar包的形式,是想通过它说明,我们可以把很多复杂的、公用的工具类的代码都封装在jar里这样方便我们精简和重用代码。
以上是关于jmeter通过BeanShell 脚本,实现对http请求参数的加密的主要内容,如果未能解决你的问题,请参考以下文章