Metersphere实现对外加密接口自动化测试

Metersphere实现对外加密接口自动化测试

目录

一、 加密规则

1.1请求参数加密规则

1.2 jar包准备工作和思路

二、 实现接口自动化测试

三、 登录metersphere

四、创建项目

2.1创建项目

2.2环境配置

2.2.1通用配置

2.2.2 http配置

2.2.3数据库配置

2.3.4上传jar包文件

五、编写场景中的测试用例

3.1场景变量

3.2自定义请求---SQL查询

3.3自定义请求---HTTP请求

3.3.1前置脚本

3.3.2后置脚本

3.3.3断言

3.3.4请求体

六、运行测试用例

 

一、加密规则

1.1请求参数加密规则

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

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

&secret=qx9iv415d7f81as213as3q4c23hv45;

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

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

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

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

1.2 jar包准备工作和思路

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

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

二、实现接口自动化测试

在metersphere场景变量中写测试用例,然后执行测试用例,但场景变量中的用例写起来数量很多且执行次数有限(比如id不能重复,编码不能重复),每次执行都要先去改一下参数的值。

(1)可以先在SQL请求中从数据库查询出来正确的参数(见3.2)

   

(2)再在前置脚本中获取查询的参数做修改即可(见3.3)

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

(3)Sql查询的参数就不用手动写在场景变量中了,因为步骤(2)中通过jar包中的方法添加到场景变量中了

 

三、登录metersphere

四、创建项目

2.1创建项目

2.2环境配置

2.2.1通用配置

2.2.2 http配置

2.2.3数据库配置

2.3.4上传jar包文件

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

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

五、编写场景中的测试用例

3.1场景变量

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

3.2自定义请求---SQL查询

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

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

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

2、按列存储:将sql运行结果填到这里,用英文逗号隔开。

bill_no,sponsor_org_id,receive_pharmacy_id

3、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.3自定义请求---HTTP请求

3.3.1前置脚本

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

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

//1、引用jar包

import main.java.*;

//2、获取场景变量中的参数reg

String 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.3.2后置脚本

prev.setDataEncoding("UTF-8");

3.3.3断言

http请求断言

脚本断言

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

3.3.4请求体

  1. 填写post路径
  2. 在请求体处选择raw,内容填写${parameterBase64}

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

六、运行测试用例

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

调试结果如下

整体看结果

响应体

 

断言结果:

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值