我正在使用soapUI 3.6.1,我想测试一个带有这样的测试结构的SOAP接口:
MyWorkspace
MyProject
TestSuite
TestCase Single
TestStep 1
TestCase Loop
Properties #1
Groovy #1
Run TestCase Single
Properties #2
Groovy #2
Run TestCase Single
TestCase Single
包含一系列应使用相同帐号ID执行的请求。 TestCase Loop
应该使用不同的帐户ID来呼叫TestCase Single
。 Properties *
应该更改帐户ID。
MyProject
设置的属性accountId
的值为1234.这应该作为单个测试用例测试的默认值,即TestCase Single
。
Properties #1
和Properties #2
为accountId
指定了不同的值。
目的是允许TestStep 1
单独执行或作为TestCase Loop
的一部分执行。
TestStep 1
有一个共同的SOAP-body,其中以下是发送到Web服务的参数:
<accId>${='${#accountId}' != '' ? '${#accountId}' : ${#Project#accountId}}</accId>
Groovy #1
和Groovy #2
如下所示:
log.info('Using account ' + (context.expand('${#accountId}') != '' ? context.expand('${#accountId}') : context.expand('${#Project#accountId}')));
我现在的问题是Groovy脚本写入accountId
的正确值(即循环内的那个),但TestStep 1
总是使用项目中的值。我希望TestStep 1
使用循环的值。
出于调试目的,我还将以下内容放入TestStep 1
:
<!--
{#Project#accountId}: ${#Project#accountId}
{#TestSuite#accountId}: ${#TestSuite#accountId}
{#TestRunContext#accountId}: ${#TestRunContext#accountId}
{#TestRun#accountId}: ${#TestRun#accountId}
{#TestCase#accountId}: ${#TestCase#accountId}
{#TestStep#accountId}: ${#TestStep#accountId}
{#MockService#accountId}: ${#MockService#accountId}
{#Global#accountId}: ${#Global#accountId}
{#System#accountId}: ${#System#accountId}
{#Env#accountId}: ${#Env#accountId}
{#accountId}: ${#accountId}
context.accountId: ${=context.accountId}
modelItem.accountId: ${=modelItem.accountId}
request.accountId: ${=request.accountId}
context.expand(): ${=context.expand('${#accountId}')}
-->
我使用Wireshark跟踪网络流量,发现只有${#Project#accountId}
返回了一个值。
我在这里做错了什么?如何编码<accId>
- 元素以将正确的值发送到远程主机?
答案 0 :(得分:0)
现在我重新审视了这个问题,我认为我找到了最好的解决方案,即使我不明白为什么我的初步尝试不起作用。
我将结构更改为:
MyWorkspace
MyProject
TestSuite
TestCase Single
TestStep 1
TestCase Loop
Groovy #1
Run TestCase Single
Groovy #2
Run TestCase Single
换句话说,我摆脱了Properties
并将逻辑移到了Groovies
:
context.getTestCase().getTestSuite().setPropertyValue("accountId_loop", "1720");
以及TestStep 1
中的相应行:
<accId>${='${#TestSuite#accountId_loop}' != '' ? '${#TestSuite#accountId_loop}' : ${#MyProject#accountId}}</accId>