如何在Groovy中使用带开关的contains

bejyjqdl  于 2022-11-01  发布在  其他
关注(0)|答案(2)|浏览(187)

使用SoapUI 5.2.1和Groovy. TestCase有2个测试步骤:
1)SOAP请求“创建”
2)Groovy脚本
目标是查找响应中是否包含确切的单词。例如,如果响应包含单词“yes”,脚本应显示消息。
我通过简单的if-else & .contains()实现了它,在我考虑了switch和如何用这种方法实现它之后。
我在这里找到了旧的解决方案Can switch use String.contains?,但它对我不起作用。我总是陷入 * 默认 *

**所以,我被卡住了。**现在的目标是使用switch查找响应中是否包含确切的单词,因为将来会有很多不同的情况。

SOAP“create”有响应,我们感兴趣的是此响应的Body部分,因为脚本提取的正是Body。

<env:Body>
 <data ...>
  <transactions>
   <next_step>yes</next>
   <message>that word</message>
  </transactions>
 </data>
</env:Body>

而Groovy脚本

response = context.expand('$create#Response#://env:Body}')

switch (response)
{
 case ~/.*word.*/:
  log.info "found"
  break
 case ~/.*damn.*/:
  log.info "found that shouldn't be found"
  break
 default:
  log.info "doesn't work"
}

response.toClass()就是java.lang.String

vs3odd8k

vs3odd8k1#

如果您想检查响应中是否存在预期的内容,这里是最好的方法之一。
采用这种方法

  • 不需要额外Groovy脚本测试步骤。
  • 您可以检查不同的字符串作为预期的内容。

步骤如下:
1.对于Soap请求测试步骤,添加“包含”Assert。
1.提供${#TestCase#EXPECTED_CONTENT}形式的值作为预期内容。
1.在测试用例级别中,添加一个自定义属性EXPECTED_CONTENT,并提供当前测试用例所需的字符串值。同样,在不同的测试中,您可以使用不同的字符串作为预期值。
好的一面是你永远不需要修改Assert,只需要改变测试用例级别的属性值,不是很简单吗?

nfzehxib

nfzehxib2#

使用闭包,例如

response = context.expand('$create#Response#://env:Body}')

switch (response)
{
 case { it.contains('word') }:
  log.info "found"
  break
 case { it.contains('damn') }:
  log.info "found that shouldn't be found"
  break
 default:
  log.info "doesn't work"
}

相关问题