基于调用测试用例的 SoapUI 模拟服务响应

SoapUI mock service response based on calling test case

流程是这样的:

客户端 RQ-> 被测系统 -> 后端系统 -> SUT -> 客户端响应

后端可以响应各种错误,目标是测试这些错误如何传播到客户端。 我正在尝试使用 soapui rest mock 来模拟后端系统。我在模拟中创建了多个错误响应。但问题是它们是由同一个Client RQ触发的。 这个想法是通过 运行.

的测试用例来确定后端响应

TC 404:客户端 RQ -> SUT -> 后端模拟响应 404 -> SUT -> 客户端 -> 断言 404

TC 无数据:客户端 RQ -> SUT -> 后端模拟响应无数据 -> SUT -> 客户端 -> 断言无数据错误 ...

由于客户端 RQ 对于每个 TC 都是相同的,因此动态选择支持的模拟响应的唯一方法是知道哪个 TC 是 运行。

最底层的问题是如何将 testRunner.testCase 对象传递给模拟响应调度程序脚本

给你:

  1. 您将无法在模拟服务中找到测试用例名称。
  2. 但是,如果您只需要测试用例名称,并且没有其他方法可以识别,那么您可以将测试用例名称作为http header 值发送到模拟服务。例如,添加 header 名称 'TC_NAME' 和值 'TC1'.
  3. http header 可以使用下面的示例脚本在模拟调度程序 SCRIPT 中读取:
log.info mockRequest.requestHeaders['TC_NAME'][0]
 //read the request header in the mock service
def tcName = mockRequest.requestHeaders['TC_NAME'][0]
def responseFile
if (tcName == 'TC1') {
    responseFile = '/set/your/right/response/for/tc1_response.xml'
} else if (tcName =='TC2'){
    responseFile = '/set/your/right/response/for/tc2_response.xml'
} else {
  //set default file as response
   responseFile = '/set/your/right/response/for/default_response.xml'
}
context.content = new File(responseFile).text

在模拟响应中,只需添加${content},这样就可以根据条件从动态文件中加载数据,并将其设置为响应内容。

您可能还会发现一些类似的例子here

希望对您有所帮助。