首页 > 解决方案 > SOAP-UI:可以在扩展中增加一个属性吗?

问题描述

我有一个简单的测试请求,我一直发送到我们的应用程序。对于测试,所有字段都可以相同,除了一个需要与早期请求不同的 transactionId。我为此定义了一个属性并将其插入到 XML 中,如下所示:

     <ns:transaktionid>${#Project#transaktionid}</ns:transaktionid>

...而且效果很好。但是,我总是需要在发送下一个请求之前更改(通常增加)该属性值,这很乏味。我知道我可以定义一个额外的测试步骤来进行这样的计算,但我发现这有点复杂。难道没有更简单的解决方案吗?

鉴于可以在此类属性扩展中嵌入 groovy 代码,我想知道,如果我不能简单地自动增加该属性值。

我因此尝试:

     <ns:transaktionid>${=(#Project#transaktionid++)}</ns:transaktionid>

......这没有用。另一种尝试是:

     <ns:transaktionid>${=(#Project#transaktionid = ${#Project#transaktionid}+1)}</ns:transaktionid>

...这也不起作用。

谷歌搜索和大量的试验和错误后来我最终得到了这个工作解决方案:

     <ns:transaktionid>${=def project = request.operation.interface.project; project.setPropertyValue("transaktionid", res = Integer.toString(Integer.parseInt(project.getPropertyValue("transaktionid"))+1)); res}</ns:transaktionid>

......但是 - 我的意思是:来吧!真的是这样吗?真的没有更短的,尤其是更优雅的解决方案来实现这一点?

某种善良的灵魂有更好的想法或更好地掌握这里的适用语法?任何有用的提示将不胜感激!

PS.:我通过为我定义一个项目属性“transaktionid”来测试上述内容,给它一个数值,比如“10”,然后简单地将上述行发送到“ http://httpbin.org/post ”的回显服务器. 在响应中有一个“数据”字段显示您发送的内容。

标签: soapui

解决方案


您可以在每次 Web 服务调用后运行 Groovy 脚本测试步骤并更新属性:

def txid = testRunner.testCase.testSuite.project.getPropertyValue("transaktionid")
testRunner.testCase.testSuite.project.setPropertyValue("transaktionid", ${txid + 1})

推荐阅读