BeanShell实现复杂加解密场景接口

一、场景说明

市面上存在一个商户想要使用某宝的接口,并想通过某宝对其授权查询订单的操作。这个时候某宝同意这个商户的接口查询要求,并且出示了以下的接口说明:

1.接入某宝需要提供各种证明在某宝上面进行注册,注册完成后,某宝会给这个商户一个专属的商户号及密钥

2.接入某宝后,调用某宝的接口时,需要将请求报文数据进行AES加密;需要对AES密钥进行RSA加密;需要对整体报文进行加签名验证商户信息

3.接入某宝后,调用返回数据与2一致均为加密数据,需要对其进行验签后进行解密方可得到正确返回数据

于是某商户成功调用,某宝要求测试员对其对外接口API进行测试并考虑压测场景支持商户查询多少数据 - <程序员的悲哀>

二、业务使用

应商户要求需要,考虑采用Jmeter的BeanShell实现。将接口中所需要的工具类进行自定义的实现后进行打包作为本次操作的核心功能。

  • 首先分析场景:

某宝的对外接口需要商户号于指定的密钥,其核心最重要的就是AES工具类(包括AES密钥的生成,AES加密/AES解密),RSA工具类(包括RSA加密/RSA解密),公私钥编码转换(Base64工具类)。所以前要工作是对接某宝的接口文档,看清楚所需要的AES及RSA的工具需要的策略算法(这个部分自行百度消化)。

  • 编写需要的工具类:(大部分工具类方法网上都有,但是要找对对应。实在不行让开发封装一个-_-)

首先应对场景编写完成了所需要的工具类,以下为局部工具代码:

BeanShell实现复杂加解密场景接口_第1张图片

BeanShell实现复杂加解密场景接口_第2张图片

BeanShell实现复杂加解密场景接口_第3张图片

  • 打包已写好的工具jar包:

我们这个地方我们采用maven自带功能,首先点击clean,然后点击install,(这个地方建议将测试类注释掉,以免打包不成功)。下图成功打包,这个时候我们可以在target文件夹下看到我们成功打好的jar包

BeanShell实现复杂加解密场景接口_第4张图片

  • jar包使用 - Jmeter实际操作:
  1. 将上述已经写好的jar包放入jmeter的目录下:/lib/ext/
  2. 为了以防万一,在测试计划下引入jar到此计划内

BeanShell实现复杂加解密场景接口_第5张图片

  1. 根据Jmeter接口测试的流程我们先创建好所需要的线程组控制器等
  2. 添加用户自定义变量、HTTP信息头(这个部分根据需要自行定义,因为需要使用到密钥这个地方我会选择将密钥定义在这个位置)

BeanShell实现复杂加解密场景接口_第6张图片

  1. 添加HTTP取样器,将参数分别设置进去后,开始进行接下来的操作:
  2. 在取样器下分别添加BeanShell前置、后置、断言:这个地方进行了拆分(前置主要做请求参数的业务,后置做响应参数处理,断言做断言)

BeanShell实现复杂加解密场景接口_第7张图片

  1. 前置处理器,将接口定义需要进行加密的参数使用工具类进行加密。最后将拼接好的参数设置到变量中于请求时使用。上图⬆️

BeanShell实现复杂加解密场景接口_第8张图片

  1. 后置处理器,将API接口返回的内容进行解密验签处理,最后将某包返回的信息进行存储断言。将处理的业务状态sign存储后断言使用

BeanShell实现复杂加解密场景接口_第9张图片

  1. 断言,对后置处理完的业务状态进行断言。这个部分的断言除了接口本身的返回状态码之外还需要对数据进行断言

BeanShell实现复杂加解密场景接口_第10张图片

  1. 结果树查看

BeanShell实现复杂加解密场景接口_第11张图片

  1. 日志查看打印的报文

BeanShell实现复杂加解密场景接口_第12张图片

三、使用分析

很显然,在使用上面来说不难,难的是怎么写代码。但是在编辑器上面写单测还好受一点,但是在这个编辑页面就有一点点离谱,不管是中英文错误类型错误还是什么错误均不会报错,运行时倒是一大堆错误日志。所以我选择在编辑器上面写好后复制粘贴上去,将参数进行参数化,其他可替代的函数使用BeanShell函数替代。

另外,说到底这个功能说好听点就是可以实现定制化接口场景实现,所以最适用的工具还是得自己写代码。这个工具在刚开始使用时写代码会出现各种离奇的现象,例如单测同样的代码拿到这个地方运行发现报异常加解密失败等,更离谱的可能都运行不起来连日志都没有。所以这个时候需要各位自行研究这个工具的各种大坑。

你可能感兴趣的:(Jmeter,jmeter,软件测试)