如何在 soapUI 中使用测试用例拆解脚本获取 REST 请求数据

How to get REST request data using test case teardown script in soapUI

我试图将测试用例中每个测试步骤的所有请求和响应数据保存到该测试用例自定义属性中。我们使用 soapUI 5.3.0 在 CLI 中打开,testRunner 报告设置为导出到具有测试属性的 Junit 报告。我们正在尝试这种方法,因为自定义构建监控系统在查看多个文件时存在问题,因此我们希望所有内容都在一个巨大的丑陋 xml 文件中(我们不仅仅限于下面列出的 5 个属性)

下面的代码处理得更好并且可以满足我的要求。还没有通过 CLI 进行测试,所以我会在可能的时候(很可能明天)报告回来

testRunner.results.each{ testStepResult -> testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_timeStamp","${testStepResult.timeStamp}")}
testRunner.results.each{ testStepResult -> testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_timeTaken","${testStepResult.timeTaken}")}
testRunner.results.each{ testStepResult -> testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_status","${testStepResult.status}")}
testRunner.results.each{ testStepResult ->
    def step = "${testStepResult.testStep.name}"
    try{response = new String(testRunner.testCase.getTestStepByName("$step").testRequest.messageExchange.rawResponseData)}catch(Exception e){e.getMessage()}
    try{request = new String(testRunner.testCase.getTestStepByName("$step").testRequest.messageExchange.rawRequestData)}catch(Exception e){e.getMessage()}
    testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_response",response)
    testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_request",request)
    request = ""
    response = ""
}

这种方式确实可以获取 WSDL 和 REST 请求+响应并通过 CLI 确认工作

testRunner.results.each{ testStepResult -> testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_timeStamp","${testStepResult.timeStamp}")}
testRunner.results.each{ testStepResult -> testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_timeTaken","${testStepResult.timeTaken}")}
testRunner.results.each{ testStepResult -> testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_status","${testStepResult.status}")}
testRunner.results.each{ testStepResult ->
    def step = "${testStepResult.testStep.name}"
    try{response = new String(testRunner.testCase.getTestStepByName("$step").testRequest.messageExchange.rawResponseData)}catch(Exception e){e.getMessage()}
    try{request = new String(testRunner.testCase.getTestStepByName("$step").testRequest.messageExchange.rawRequestData)}catch(Exception e){e.getMessage()}
    testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_response",response)
    testRunner.testCase.setPropertyValue("${testStepResult.testStep.name}_request",request)
    request = ""
    response = ""
}

如您所见,我不得不将 reqests\responses 包装成 try\catch 因为在测试用例中并非所有内容都是 REST 或 WSDL。