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

如何在SOAPUI中让随机参数每2次调用复用后重新生成

SOAPUI Stub实现随机数两次复用的解决方案

可以通过TestSuite级别的全局变量结合Groovy脚本实现需求,具体步骤如下:

核心思路

利用TestSuite的属性存储当前生效的随机数和已使用次数,每次请求时判断是否需要生成新随机数:

  • 若未生成过随机数,或当前随机数已使用2次,则生成新数并重置使用次数
  • 若当前随机数仅使用过1次,则直接复用并增加使用次数

具体实现

1. 修改Stub的Groovy脚本逻辑

替换原有的随机数生成代码,改用以下脚本:

// 获取当前TestSuite实例
def testSuite = context.testCase.testSuite

// 从TestSuite读取全局属性,首次运行时初始化默认值
def currentActReq = testSuite.getPropertyValue("currentActReq")
def usageCount = testSuite.getPropertyValue("usageCount") ? Integer.parseInt(testSuite.getPropertyValue("usageCount")) : 0

// 判断是否需要生成新的随机数
if (!currentActReq || usageCount >= 2) {
    // 生成8位随机数(10000000~99999999)
    currentActReq = (10000000 + Math.abs(new Random().nextInt() % 99999999)).toString()
    usageCount = 0
}

// 更新使用次数
usageCount++

// 将更新后的值保存回TestSuite全局属性
testSuite.setPropertyValue("currentActReq", currentActReq)
testSuite.setPropertyValue("usageCount", usageCount.toString())

// 存入requestContext供响应模板引用
requestContext.actreq = currentActReq

2. 保持响应模板引用不变

响应中依然使用${actreq}引用该随机数,无需修改。

多会话场景适配(可选)

如果需要区分不同客户端的会话(避免不同客户端互相干扰随机数复用逻辑),可从请求中提取会话标识(如请求中的sessionId字段),用Map存储不同会话的随机数和使用次数:

def testSuite = context.testCase.testSuite

// 从请求中提取会话标识(示例:假设请求XML中包含<sessionId>节点)
def sessionId = request.getRequestContent().getElementsByTagName("sessionId").item(0)?.getTextContent()
if (!sessionId) {
    throw new Exception("未找到会话标识sessionId")
}

// 读取或初始化会话数据存储
def sessionData = testSuite.getPropertyValue("sessionData") ? new groovy.json.JsonSlurper().parseText(testSuite.getPropertyValue("sessionData")) : [:]
def sessionInfo = sessionData[sessionId] ?: [actReq: null, count: 0]

// 判断是否生成新随机数
if (!sessionInfo.actReq || sessionInfo.count >= 2) {
    sessionInfo.actReq = (10000000 + Math.abs(new Random().nextInt() % 99999999)).toString()
    sessionInfo.count = 0
}

// 更新会话使用次数
sessionInfo.count++

// 保存会话数据回TestSuite
sessionData[sessionId] = sessionInfo
testSuite.setPropertyValue("sessionData", new groovy.json.JsonBuilder(sessionData).toString())

// 供响应模板使用
requestContext.actreq = sessionInfo.actReq

内容的提问来源于stack exchange,提问作者Fuzz1001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:40:22