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

如何在SOAP UI的Setup Script中执行测试用例并传递REST响应值?

刚好我之前处理过类似的SOAP UI/LoadUI跨用例传值场景,来帮你一步步解决这两个问题:

问题1:在SOAP UI的Setup Script中执行现有测试用例并传递响应值

要实现这个需求,你可以用Groovy脚本在Setup Script里调用目标测试用例,提取响应值后存到当前用例可访问的属性中,具体步骤如下:

  • 定位并执行目标测试用例
    先获取目标测试用例的对象,然后同步执行它(确保它跑完再继续当前脚本):

    // 获取当前测试套件
    def testSuite = context.testCase.testSuite
    // 替换成你要调用的测试用例名称
    def targetTestCase = testSuite.getTestCaseByName("Test case 1")
    // 执行目标测试用例(同步执行,等待完成)
    targetTestCase.run(null, false)
    
  • 提取目标请求的响应内容
    找到目标测试用例里的具体请求,获取它的响应字符串:

    // 替换成目标测试用例里的REST请求名称
    def targetRequest = targetTestCase.getTestStepByName("启动会话请求")
    def responseContent = targetRequest.response.contentAsString
    
  • 解析响应并存储值到当前用例
    用Groovy的JsonSlurper解析JSON响应,把需要的值存到当前测试用例的属性中,方便后续请求引用:

    def jsonSlurper = new groovy.json.JsonSlurper()
    def responseJson = jsonSlurper.parseText(responseContent)
    // 示例:提取VotingSessionID并存储
    def sessionId = responseJson.VotingSessionID
    context.testCase.setPropertyValue("VotingSessionID", sessionId.toString())
    

    之后当前测试用例的请求就能用${#TestCase#VotingSessionID}来引用这个值了。

问题2:将Test case1的VotingOptionID传递到Load UI的Test case2请求中

针对你的场景(Test case1禁用,通过负载测试的Setup Script调用,需传递VotingOptionID),可以按以下步骤操作:

  • 在Setup Script中执行Test case1并解析响应
    先执行Test case1,然后从JSON响应里提取指定的VotingOptionID(比如第一个问题下的第一个选项ID):

    def testSuite = context.testCase.testSuite
    def testCase1 = testSuite.getTestCaseByName("Test case 1")
    // 执行Test case1
    testCase1.run(null, false)
    
    // 获取Test case1里的REST请求响应
    def startRequest = testCase1.getTestStepByName("你的REST请求名称")
    // 先判断请求是否成功,避免解析失败
    if (!startRequest.response || startRequest.response.status != 200) {
        throw new Exception("Test case1的启动请求执行失败,无法获取VotingOptionID")
    }
    def responseJson = new groovy.json.JsonSlurper().parseText(startRequest.response.contentAsString)
    
    // 提取第一个Question下第一个Option的VotingOptionID
    def targetOptionId = responseJson.Questions[0].Options[0].VotingOptionID
    
  • 将值存储到全局可访问的属性中
    因为是负载测试,建议把值存到测试套件属性里,这样负载测试的所有线程都能访问:

    testSuite.setPropertyValue("TargetVotingOptionID", targetOptionId.toString())
    
  • 在Test case2的REST请求中引用该值
    打开Test case2的REST请求,在需要传入VotingOptionID的位置(比如请求体或参数),用${#TestSuite#TargetVotingOptionID}来引用:

    // 示例请求体
    {
      "SelectedOptionID": ${#TestSuite#TargetVotingOptionID}
    }
    
  • 额外提示
    如果你需要分配不同的VotingOptionID给负载测试的不同线程,可以把所有选项ID存成数组,然后结合线程号来取对应的值,比如:

    // 提取所有VotingOptionID并存成数组
    def allOptionIds = responseJson.Questions[0].Options.collect { it.VotingOptionID }
    // 存到测试套件属性(转成字符串)
    testSuite.setPropertyValue("AllOptionIDs", allOptionIds.toString())
    // 在负载测试的请求脚本里,根据线程号取对应ID
    def optionIds = context.testCase.testSuite.getPropertyValue("AllOptionIDs").tokenize(",").collect { it.trim() as Integer }
    def currentOptionId = optionIds[context.currentThreadIndex % optionIds.size()]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:21:38