2011-01-11 9 views
1

Ich verwende soapUI 3.6.1 und ich möchte wie diese eine SOAP-Schnittstelle mit einer Teststruktur testen:soapUI: Immobilie nicht in Immobilien Expansion in einem Testfall verwendet

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 enthält ein Bündel von Anfragen, die mit derselben Account-ID ausgeführt werden sollen. TestCase Loop soll TestCase Single mit verschiedenen Account-IDs aufrufen. Die Properties * sollen die Konto-ID ändern.

MyProject hat eine Eigenschaft accountId eingerichtet mit Wert 1234. Dies sollte als Standardwert für einzelne Tests der Testfälle funktionieren, d. H. TestCase Single.

Properties #1 und Properties #2 haben accountId mit verschiedenen Werten angegeben.

Es soll TestStep 1 allein oder als Teil von TestCase Loop ausgeführt werden.

TestStep 1 hat einen gemeinsamen SOAP-Körpers, wo die folgenden ein Parameter an den Web-Service gesendet wird:

 <accId>${='${#accountId}' != '' ? '${#accountId}' : ${#Project#accountId}}</accId> 

Groovy #1 und Groovy #2 sieht wie folgt aus:

log.info('Using account ' + (context.expand('${#accountId}') != '' ? context.expand('${#accountId}') : context.expand('${#Project#accountId}'))); 

Mein Problem ist jetzt, dass Das Groovy-Skript schreibt den korrekten Wert accountId (dh den innerhalb der Schleife), aber TestStep 1 verwendet immer den Wert aus dem Projekt. Ich möchte TestStep 1 den Wert der Schleife verwenden.

Für Debugging-Zwecke Ich habe auch die folgenden in 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}')} 
--> 

ich den Netzwerkverkehr mit Wireshark verfolgt und festgestellt, dass nur ${#Project#accountId} Wert zurückgegeben.

Was mache ich hier falsch? Wie muss ich das <accId> -Element codieren, um den korrekten Wert an den Remote-Host zu senden?

Antwort

0

Jetzt habe ich dieses Problem noch einmal überprüft und ich denke, dass ich die bestmögliche Lösung gefunden habe, obwohl ich nicht verstehe, warum mein erster Versuch nicht funktioniert hat.

änderte ich die Struktur so aus:

MyWorkspace 
    MyProject 
     TestSuite 
      TestCase Single 
       TestStep 1 
      TestCase Loop 
       Groovy #1 
       Run TestCase Single 
       Groovy #2 
       Run TestCase Single 

Mit anderen Worten habe ich von der Properties los und bewegt die Logik in die Groovies:

context.getTestCase().getTestSuite().setPropertyValue("accountId_loop", "1720"); 

und die entsprechende Zeile in TestStep 1:

 <accId>${='${#TestSuite#accountId_loop}' != '' ? '${#TestSuite#accountId_loop}' : ${#MyProject#accountId}}</accId>