SoapUI如何动态生成请求密码?脚本创建及调用配置方法
SoapUI动态生成SHA256加密请求密码实现方案
1. 是否支持每次发请求自动生成对应密码?
完全支持,不需要安装第三方插件。SoapUI原生内置Groovy脚本引擎,可以在请求发送前自动执行自定义逻辑,完全匹配「基础密码拼接时间戳+SHA-256编码」的生成规则,每次触发请求都会生成新的有效密码。
2. 生成密码的脚本创建位置
根据脚本复用范围,选择对应位置创建即可:
- 仅单个接口请求需要用动态密码:打开对应请求的编辑页,切换到Setup Script标签页写脚本,该脚本会在当前请求发送前自动执行。
- 同个测试用例下多个请求需要复用密码:打开对应测试用例的编辑页,在测试用例级别的Setup Script标签页写脚本,下属所有请求发送前都会共享这段逻辑的执行结果。
- 同个测试套件/整个项目下所有请求都要复用:可以在测试套件、项目级别的Setup Script中编写,也可以在全局事件的
RequestFilter.beforeRequest过滤器中写脚本,对所有匹配规则的请求生效。
3. 生成的密码如何传入请求
最通用的方式是把生成的密码、用到的时间戳存入对应层级的自定义属性,请求中通过SoapUI内置的占位符直接读取即可,附可直接使用的示例脚本:
import java.security.MessageDigest // 替换为你实际的密码基础值 def basePassword = "your_base_pwd_here" // 注意和后端对齐时间戳规则:是秒级(10位)还是毫秒级(13位),示例为13位毫秒时间戳 def timestamp = System.currentTimeMillis().toString() def rawStr = basePassword + timestamp // 计算SHA-256哈希值 def sha256Digest = MessageDigest.getInstance("SHA-256") byte[] hashResult = sha256Digest.digest(rawStr.getBytes("UTF-8")) // 转十六进制字符串,如果后端要求大写结果可在末尾追加.toUpperCase() def dynamicPwd = hashResult.encodeHex().toString() // 将值存入测试用例自定义属性,请求可直接读取 testCase.setPropertyValue("reqTimestamp", timestamp) testCase.setPropertyValue("signPwd", dynamicPwd)
脚本存好后,不管你需要把密码放在请求头、URL查询参数、表单参数还是请求体中,直接用${属性名}格式的占位符引用即可:
- 放在请求头:新增头字段
Authorization: ${signPwd} - 放在JSON请求体:
{"password":"${signPwd}","timestamp":"${reqTimestamp}"} - 放在表单参数:参数值直接填
${signPwd}即可
注意:请务必和后端确认拼接顺序、时间戳单位、哈希结果大小写规则,任意一项不匹配都会导致密码校验失败。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

