2016-09-28 13 views
1

私が使用するケースは、複数のSoapUIプロジェクトでリクエスト本文の一括更新を行いたいということです。SoapUIのcontext.expand式でネストされたパラメータを使用する方法は?

リクエストボディの例。

{ 
"name": "${#TestSuite#NameProperty}" 
"id": "${#TestSuite#IdProperty}" 
} 

は、私はそれは、必要に応じて修正するのTestSuiteレベルで格納された値をプロパティ$ Groovyの通じ{#テストスイート#NameProperty}を展開し、取得したいです。

私のテストケースで50のテストステップがあり、Groovyスクリプトからそれぞれの要求を拡張したいとします。特定のテストステップを展開するには、テストステップの名前を渡します。例:

expandedProperty = context.expand('${testStep1#Request}') 

しかし、すべてのテストステップを50回繰り返しても同じ結果を得るにはどうすればよいでしょうか? context.expand式の中でネストされたパラメータを使用しようとしましたが、動作しませんでした。たとえば、次のように

currentTestStepName = "TestStep1" 
expandedProperty = context.expand('${${currentTestStepName}#Request}') 

これは私だけ(私はからのGroovyスクリプトを実行しています)右のそれ以上の試験段階ではなく、「TestStep1」段階から拡大要求を返されました。 (これは狂気です!)

また、context.expandは、Groovyスクリプトを使ってSoapUIワークスペースプロジェクトから実行している間のみ動作するようです。ヘッドレス実行中に "$ {#TestSuite#NameProperty}"のようなプロパティを展開できるcontext.expandと似た方法がありますか?例:SoapUIでインポートされたグルーヴィーなコンパイル済みのjarファイル。

事前にお問い合わせいただきありがとうございます。

+0

実際のTestStepの名前になるように文字列を構成することで、わかりました。しかし、私はそこにいても簡単な方法があると思っていました。例:** string = "\ $" + "{TestStep1#Request}" ** **文字列を展開する** context.expand(string)** – Dighate

+0

あなたのユースケースは何ですか?テストのすべてのリクエストをどこに書きたいのですか? groovyスクリプトは同じテストケースですか? – Rao

+0

オリジナルの質問で私の使用状況が更新されました。 – Dighate

答えて

2

context.expand('${${currentTestStepName}#Request}')の方法で入手できます。

context.expandを使用しない他のアプローチもあります。任意の所与のテストステップの単一テストステップ要求を取得するために

に:

ここでユーザは、変数stepName、ステップ名を渡します。

log.info context.testCase.testSteps[stepName].getPropertyValue('Request') 

テストケースのすべてのリクエストを取得する場合は、以下のスクリプトを使用する簡単な方法があります。

/** 
* This script loops thru the tests steps of SOAP Request steps, 
* Adds the step name, and request to a map. 
* So, that one can query the map to get the request using step name any time later. 
*/ 
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep 
def requestsMap = [:] 
context.testCase.testStepList.each { step -> 
    log.info "Looking into soap request step: ${step.name}" 
    if (step instanceof WsdlTestRequestStep) { 
     log.info "Found a request step of required type " 
     requestsMap[step.name] = context.expand(step.getPropertyValue('Request')) 
    } 
} 
log.info requestsMap['TestStep1'] 

更新: あなたが興味を持っているステップはRESTステップ、上記で代わりWsdlTestRequestStepの条件下記の使用である場合。

if (step instanceof com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep) { //do the stuff } 
+0

私はgetPropertyValue( 'Request')を使用しようとしましたが、 "$ {#TestSuite#NameProperty}"を含む実際の文字列を返します。しかし、私は実際の値を "$ {#TestSuite#NameProperty}"の中に入れたいので、context.expandを使用しようとしていました。 – Dighate

+0

なぜ '$ {#TestSuite#NameProperty} 'の値を置き換えたいのですか?代わりにプロパティの値を変更してください。 – Rao

+0

私が取り組んでいる一括更新ユーティリティでは、JSONリクエストを構造が異なる新しいものに変換します。また、私はプロパティを更新する前にいくつかの充足条件をチェックするので、プロパティを変更することはできません。 – Dighate

関連する問題