上一节介绍到了使用groovy实现接口自动化测试的基本功能。
本节将介绍groovy执行用例动态参数、参数回传、参数加密、soapui引入第三方jar包、生成随机参数(绕过业务逻辑中的一些唯一校验阻碍自动化),以适应更真实、复杂的场景。
soapui引入第三方jar包
现在JAVA的优势在于JVM平台和累积起来的丰富的第三方资源了,这也是groovy类JVM语言的优势。
将第三方jar包拷贝只<soapui安装目录>/bin/ext
目录下即可。
然后代码中使用import引入:例import customer.RSAUtils
加密
本例使用RSA加密,groovy需要使用java的第三方包,从网上找了个工具类打包到custom.jar,拷贝到soapui扩展目录。
1.生成公私密钥到d盘RSAUtils.generateKeyPair('d:/')
2.文本编辑器打开生成的publicKey.keystore
文件,将三行合并成一行用\n
分隔。例:
PUBLIC_KEY_BASE64 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCC4d0q2qR7G21TmObv5l0fxpMHcD34pqCjJoIl\nvU/Oa+0rsNkkZljvQAenY8ZNpOPzcfUL/F+qwTpuJh5ny6zl9gPloQRd6PcWob1Z+cuSoEAwBZx4\n+Yw/2QAARjxs5e8GeF0IdY/HK/HmpTCKbmKbUxNaftmeRwfgaG/TGZ93CwIDAQAB"
3.修改任务文件,对账号密码进行加密。
{
"comment": "登录接口 status=1 登录成功。reqName格式为:TestCaseName-TestStepName;expect为期望值;extParams的属性可以动态设置值并覆盖用例的默认参数",
"reqName": "TestSuite-login",
"extParams": {
"account": "rsaEncrypt{lj745280746}",
"password": "rsaEncrypt{123456}"
},
"expect": {
"status": "1"
}
}
4.修改代码。任务文件新增了rsaEncrypt{<content>}
语法,需要在代码中解析。
//新增方法----------------------------
//rsa 加密内容
def rsaEncrypt(value) {
return RSAUtils.encrypt(RSAUtils.getPublicKey(PUBLIC_KEY_BASE64), value)
}
//添加扩展参数
def addExtParams(params, testStep) {
if (!params || params.size() == 0) return
params.each {k, v ->
testStep.setPropertyValue(k, interpreter(v))
}
}
//解析替换字符串中的自定义语法
def interpreter(v) {
def rsaParamPattern = ~/rsaEncrypt\{\s*(.*?)\s*\}/
def rs = v
def sb = new StringBuffer()
//rsa加密 替换 例:"rsaEncrypt{18600000000}"
def mR = rsaParamPattern.matcher(rs)
sb.delete(0, sb.length())
while(mR.find()) {
mR.appendReplacement(sb, rsaEncrypt(mR.group(1)))
}
mR.appendTail(sb)
rs = sb.toString()
}
//······
//执行任务发送请求前覆盖默认参数
({
//加载任务
def taskFile = new File(CURRENT_TESTCASE.properties.task_file.value)
def tasks = JSON.parseText(taskFile.getText())
//执行任务
tasks.