如何在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
相关产品推荐
相关产品推荐

