You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:30:49