使用分享|MeterSphere实现对外加密接口自动化测试

发布于 2021年04月02日

以下文章来源于CSDN博客分享,作者Cy123_cy。

准备1:什么是加密规则

1. 请求参数加密规则

1-1. 按照请求参数名称的ASCII码顺序组装成字符串,用&符号链接,如"appId=mcpbasic&code=&noStr=1594196501668",其中"appId"、"code"、"noStr"分别为参数名,按ASCII码顺序组装成字符串;

1-2. 将secret密钥作为参数拼接到字符串后,如"appId=mcpbasic&code=&noStr=1594196501668

&secret=qx9iv415d7f81as213as3q4c23hv45";

1-3. 对组装好的字符串进行MD5加密转大写,如"573792BE79621279A712D6860DA6B60C";

1-4. 组装json字符串,json对象内容没有加密前字符串除secret外其他的键值对以及MD5加密后数据作为键值sign的value值一并组装成json字符串,如{"noStr":"1594196501668","code":"","appId":"mcpbasic","sign":"573792BE79621279A712D6860DA6B60C"};

1-5. 将组装好的json字符串进行Base64 GBK方式加密形成加密后的密文,如"eyJub1N0ciI6IjE1OTQxOTY1MDE2NjgiLCJjb2RlIjoiIiwiYXBwSWQiOiJtY3BiYXNpYyIsInNpZ24iOiI1NzM3OTJCRTc5NjIxMjc5QTcxMkQ2ODYwREE2QjYwQyJ9";

1-6. 将加密好的Base64密文作为接口入参,并调用接口获取接口返回数据。

2. Jar包准备工作和思路

由于MeterSphere无法对参数的加密规则进行处理,所以要在Java开发工具IDEA中写java代码来实现参数的加密规则处理,最终返回一个加密后的密文,在http请求中作为入参调用

  • 首先打开IDEA,创建java项目,新建一个class文件,按照开发提供的加密规则编写java代码。
  • 除了按加密规则写了一个方法外,还要再写一个添加方法,可以将参数添加到jason格式的字符串参数中。
  • 使用IDEA测试一下写好的代码,通过后使用IDEA进行打包。
  • 登录meterspere将jar包上传。
  • 使用metersphere中的前置脚本调用该jar包。
  • 在前置脚本中使用jar包中的添加方法将处理好的参数添加到json字符串中。
  • 在前置脚本中使用jar包中的加密方法,将整个json字符串参数进行加密处理。

准备2:如何实现接口自动化测试

如果我们直接在MeterSphere场景变量中写测试用例,然后执行测试用例。那我们会遇到的一个问题是,场景变量中的用例写起来数量很多且执行次数有限(比如ID不能重复,编码不能重复),每次执行都要先去修改参数的值。下面是在MeterSphere中实现接口自动化测试的方法

Step 1: 在SQL请求中从数据库查询出正确的参数;

▲图1

Step 2: 对前置脚本中获取查询的参数做修改;

比如单据号是否正确。想要写一个测试用例为“单据号错误”,只需要查询出正确的单据号,再做修改后自动放入到场景变量reg中即可。

▲图2

Step 3: SQL查询的参数就不用手动写在场景变量中,因为该参数已经在Step2中通过Jar包的方法添加了。

▲图3

有了上述的2点准备,我们就可以正式开始在MeterSphere中实现对外加密接口自动化测试了。

登录MeterSphere

首先登录MeterSphere。

▲图4

创建项目

1. 创建项目

在“系统设置”中创建需要测试的项目。

▲图5

2. 环境配置

2-1. 通用配置

▲图6

2-2. http配置

▲图7

2-3. 数据库配置

▲图8

2-4. 上传Jar包文件

包括自定义的Jar包以及一些内部Jar包(内部Jar有需要就补充,主要是IDEA中添加的jar包)。

▲图9

自定义Jar包在IDEA中添加方法如下:在main\java文件夹下新建一个class文件,写好之后打包即可。

▲图10

编写场景中的测试用例

1. 场景变量

填写变量名和值,接口所需要的参数都写在值里。

▲图11

2. 自定义请求——SQL查询

SQL查询自定义请求的目的是为了自动获取参数。

每次执行不需要在场景变量中手动修改测试用例,只需要运行SQL查询,获取自己需要的参数即可。获取之后可以在前置脚本中对参数进行修改,再通过Jar包中的方法,放在场景变量中。

▲图12

运行环境数据源名称:

添加添加运行环境、数据源名称(在环境配置中配置)。

按列存储

将SQL运行结果填到这里,用英文逗号隔开。

bill_no,sponsor_org_id,receive_pharmacy_id

SQL脚本:

获取自己所需要的参数,返回一条数据(一行一列)即可。

SELECT b.bill_no,b.sponsor_org_id,d.receive_pharmacy_id from rdc_material_bill  b,rdc_distribution  d where  b.distribution_id= d.id  and   b.delete_status='N'  and d.delete_status='N'  and  d.send_status='0'  and b.bill_type='5'  limit 1

3. 自定义请求——HTTP请求

3-1. 前置脚本

在前置脚本中,主要是对参数的一些处理。

变量可以直接全部写在场景变量中(非自动化接口测试),也可以将SQL自定义请求的参数再通过Jar包中的方法,放在场景变量中,实现接口自动化测试。

▲图13

参考文档中的内容:

//1、引用jar包import main.java.*;
//2、获取场景变量中的参数regString reg=vars.get("MAT001_1.正确参数");
//3、获取sql查询的参数, bill_no_1表示这一列的第一行参数String billNo = vars.get("bill_no_1");String orgId = vars.get("sponsor_org_id_1");String roomId = vars.get("receive_pharmacy_id_1");
//4、引用jar包中的方法addvalue()将处理好的值传入到场景变量中的参数reg中GetParmsJson p =new GetParmsJson();String reg = p.addValue(reg,"billNo",billNo);String reg = p.addValue(reg,"orgId",orgId);String reg = p.addValue(reg,"roomId",roomId);
//5、引用jar中的方法getStringToJson02( )对场景变量中的参数按照加密规则进行加密String s= p.getStringToJson02("noStrN",reg,"${secret}");
//6、将最终处理好的参数存在metersphere中,以便请求体获取参数vars.put("parameterBase64",s);
 //7、调试中的使用的语句,打印日志 log.info("打印输出"+s);

3-2. 后置脚本

prev.setDataEncoding("UTF-8");
▲图14

3-3. 断言

http请求断言:

▲图15

脚本断言:

if(${sum_1}==1){    AssertionResult.setFailure(false);    log.info("=====诊疗目录启用成功=====");}else{    AssertionResult.setFailure(true);    log.info("=====诊疗目录启用失败=====");}
▲图16

3-4. 请求体

▲图17

Step 1: 填写POST路径

Step 2: 在请求体处选择raw,内容填写

${parameterBase64}

${parameterBase64}------获取前置脚本中保存的经过BASE64加密后的参数。

运行测试用例

带有SQL请求的必须要点调试才行,测试用例是按顺序从上到下执行的。

▲图18

调试结果如下:

整体看结果:

▲图19

响应体:

▲图20

断言结果:

▲图21

————————————————
版权声明:本文为CSDN博主「Cy123_cy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://blog.csdn.net/Cy123_cy/article/details/115081633