一. 背景:
调用接口时有个请求参数是对请求入参按一定规则进行加密生成的验签值,每次不同参数的请求生成唯一的验签值,验签值不对,接口会报相应的错误。
二. 解决方案:
- 代码写死账号,写死的账号不走验证逻辑
- 调用接口之前,按照加密规则生成一样的验签值
三. 下面用soapui工具进行接口测试生成正确验签值的示例:
- 参数化请求参数(DataSource)
- 使用groovy脚本调用java加密的jar包生成正确的验签值 (Groovy Script)
- 调用接口 (HTTP)
- 校验输出是否正确 (Groovy Script 或者 Assertion TestStep)
- 将需要的数据输出 (DataSink)
- 循环参数化的参数进行不同参数的接口测试 (DataSoure Loop)
- 执行所有参数请求
1.参数化请求参数
1.1 新建DataSource步骤
1.2 准备excle参数化数据
1.3 添加参数化文件,并且加上后续接口调用需要的字段名(最好和请求参数保持一致)
1.4 选择需要的参数行数
2.Groovy 脚本
2.1 添加Groovy Script脚本步骤
2.2 将java加密jar包放在soapui安装目录下--C:\Program Files\SmartBear\SoapUI-Pro-5.1.2\bin\ext
2.3 写groovy脚本调用java加密jar包生成一样的验签值,放在soapui的安装目录下--C:\Program Files\SmartBear\SoapUI-Pro-5.1.2\bin\scripts下
将公用的脚本均可放在次目录下,供soapui直接调用
2.4 soapui里面的groovy脚本调用公用的scripts里面的脚本按不同请求生成正确的sign值
//调用公用加密方法
def myMd5 = new MD5()
def key = "AAAAAAAAAAAAA"
//传参
def mapMd5 = [:]
mapMd5 = [
'service':context.expand( '${DataSource#service_name}' ),
'version':context.expand( '${DataSource#version}' ),
'AAA':context.expand( '${DataSource#AAA}' ),
]
//取DataSource的参数值
def myDatasource = testRunner.testCase.testSteps["DataSource"]
//MD5加密 Start
def output = myMd5.getMapString(mapMd5,key)
log.info "output: " + output
def sign = myMd5.getMD5(output)
log.info "sign: " + sign
//MD5加密 End
testRunner.testCase.testSteps["HTTP"].setPropertyValue("sign",sign)
3.HTTP接口的sign值被上个步骤设置,调取接口
4. 校验参数是否正确,自己根据需求进行校验
5. 将需要的参数输出
6. 设置循环的参数和接口
7. 执行数据源里面的接口,进行自动化测试
--------------至此,整个接口就可以顺利自动化调取了和校验了----------------