mde2(使用分享|MeterSphere实现对外加密接口自动化
以下文章来源于CSDN博客分享,作者Cy123_cy。
准备1什么是加密规则
1. 请求参数加密规则
1-1. 按照请求参数名称的ASCII码顺序组装成字符串,用符号链接,如"appId=mcpbasiode=noStr=1594196501668",其中"appId"、"code"、"noStr"分别为参数名,按ASCII码顺序组装成字符串;
1-2. 将secret密钥作为参数拼接到字符串后,如"appId=mcpbasiode=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__id,receive_pharmacy_id
SQL脚本
获取自己所需要的参数,返回一条数据(一行一列)即可。
SELECT b.bill_no,b.sponsor__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包 importmain.java.; //2、获取场景变量中的参数reg String reg=vars.get("MAT001_1.正确参数"); //3、获取sql查询的参数,bill_no_1表示这一列的第一行参数 StringbillNo=vars.get("bill_no_1"); StringId=vars.get("sponsor__id_1"); String roomId = vars.get("receive_pharmacy_id_1"); //4、引用jar包中的方法addvalue()将处理好的值传入到场景变量中的参数reg中 GetParmsJsonp=newGetParmsJson(); Stringreg=p.addValue(reg,"billNo",billNo); Stringreg=p.addValue(reg,"Id",Id); 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("打印输出" s);
3-2. 后置脚本
prev.setDataEncoding("UTF-8");
▲图14
3-3. 断言
http请求断言
▲图15
脚本断言
if(${sum_1}==1){ AssertionResult.setFailure(false); log("=====诊疗目录启用成功====="); }else{ AssertionResult.setFailure(true); log("=====诊疗目录启用失败====="); }
▲图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版权协议,转载请附上原文出处链接及本声明。
原文链接
blog.csdn/Cy123_cy/article/details/115081633
比赛规则
- 男足世界杯预选赛亚洲赛程 中国男足世界杯预选
- 雷霆火箭比赛直播:雷霆火箭全场回放
- 中国短道速滑队最新消息 中国短道速滑队再创佳
- 苏炳添今天几点比赛 苏炳添今天比赛时间
- 斯诺克今晚直播比赛 斯诺克今晚直播比赛时间
- 乒乓球女团决赛时间 巴黎奥运会乒乓球女团决赛
- 国乒巴黎奥运会参赛名单 国乒巴黎奥运会参赛名
- 王曼昱晋级全运会乒乓球女单决赛 王曼昱全运会
- 男乒乓球团体赛决赛直播 男乒乓球团体赛决赛直
- 阿尔卡拉斯vs德约科维奇决赛 阿尔卡拉斯vs德约科
- 奥运会乒乓球比赛时间 巴黎奥运会乒乓球比赛时
- 中国男篮奥运落选赛 中国男篮奥运落选赛对手
- 2024斯诺克冠军联赛即将开战 2024斯诺克冠军联赛
- 丁俊晖vs奥沙利文直播 丁俊晖对战奥沙利文战绩
- 西甲国王杯半决赛 西甲国王杯半决赛时间
- 2024年乒乓球比赛赛事 2024年乒乓球比赛时间表