soapui - 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 ”的回显服务器. 在响应中有一个“数据”字段显示您发送的内容。
解决方案
您可以在每次 Web 服务调用后运行 Groovy 脚本测试步骤并更新属性:
def txid = testRunner.testCase.testSuite.project.getPropertyValue("transaktionid")
testRunner.testCase.testSuite.project.setPropertyValue("transaktionid", ${txid + 1})
推荐阅读
- c# - How to set timer of 5 min to do certain operation in app and if timeouts, raise another event to do other task
- c# - 如何使用 JSON.NET 进行序列化并忽略可为空的结构值
- three.js - THREE.js 识别单击一个几何体(合并几何体)
- python - Macro metrics (recall/F1...) for multiclass CNN
- javascript - 选中多个复选框时更改按钮文本
- c# - WPF ListView GridViewColumn 宽度 50% 的空间
- python - I want to use the redis cache in Django, but I found that python 3.7 does not support django-redis. Is there an alternative?
- indy10 - 读取 TidTCPServer 传入数据直到断开连接
- kotlin - 无需在 Dagger 中使用组件即可注入 Kotlin 成员字段
- c# - 将资源属性更改为纯文本