【问题标题】:SoapUI mock service response based on calling test case基于调用测试用例的 SoapUI 模拟服务响应
【发布时间】:2016-05-26 09:19:53
【问题描述】:

流程是这样的:

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

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

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

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

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

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

【问题讨论】:

  • 您使用的是什么类型的mock dispatcher?您不能根据请求确定响应中要返回的内容吗?
  • 正如我所说,所有情况下的请求都是相同的,因此无法根据请求选择响应。
  • 希望请求可能相同,但是你可以对某些元素使用不同的值,以便于识别?有意义吗?
  • 很遗憾没有。如您所见,我没有将请求发送到后端系统。 SUT 可以,我无法控制它。我打电话给 SUT,SUT 打电话给后端。我将使用序列分派,并将 SUT 配置为仅重试一次。然后我将使用正确的断言和模拟响应对请求进行相同的顺序。

标签: rest groovy mocking soapui


【解决方案1】:

给你:

  1. 您将无法在模拟服务中找到测试用例名称。
  2. 但是,如果您只需要测试用例名称,而没有其他方法可以识别,那么您可以将测试用例名称作为 http 标头值发送到模拟服务。例如,添加标题名称“TC_NAME”和值作为“TC1”。
  3. 可以使用以下示例脚本在模拟调度程序SCRIPT 中读取http 标头:
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

希望这会有所帮助。

【讨论】:

  • 它在我的情况下不起作用,因为我将请求发送到 SUT,而 SUT 将请求发送到模拟的支持。我可以将请求中的标头设置为 SUT,但我无法在 SUT 向支持的模拟发出的请求中设置标头。
  • 但是我接受您的回答,因为无法在模拟服务中访问 testRunner,并且您的回答包含非常有用的知识和平。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多