2016-08-23 13 views
1

私の動機は、 'Properties'テストステップで保存したXMLドキュメントを使用してJDBC呼び出しからの応答をアサートすることです。私はいくつかの値を検証する必要があります。JDBCではmessageExchangeオブジェクトは使用できませんTeststepアサーションがSOAP要求アサーションで利用可能

SoapUI 5.2.1のJDBCテストステップにスクリプト型アサーションを使用しようとしています。私は以前に「SOAP Request」テストステップのスクリプトタイプアサーションを作成していて、うまく動作します。私が使用するJDBCの場合:

def testCase = messageExchange.modelItem.testCase; 

私はエラー

は「ヌルオブジェクト上で 『modelItem』プロパティを取得できません」を取得します。

同じことがSOAPリクエストでスクリプトアサーションで使用されており、うまくいきました。どういうわけか、暗黙のオブジェクト 'messageExchange'はJDBCテストステップでのみ利用可能で、NPEをスローします。 enter image description here

+0

てみmessageExchange.metaClass.methods' log.info月 '' modelItem見るために'利用できません。 – Rao

+0

@Rao同じログを記録しようとしたときに、もう一度nullエラーに直面しました。しかし、いったんmessageExchangeを削除して "metaClass.methods"を記録すると、ObjectメソッドのリストとScriptクラスのいくつかのメソッドが画面に記録されました。したがって、messageExchangeはまだnullです。 –

+0

実際にjdbcテスト・ステップを実行せずにスクリプト・アサーションを実行する場合はありますか?なぜなら、スクリーンショットは応答エディタにxmlを表示しないからです。 – Rao

答えて

3

messageExchangeオブジェクトは利用できません。あなたがScript Assertionエディタの右上隅を見ると、messageExchangeオブジェクトが利用可能であることが明らかです(下図参照)。

スクリプトは、ログ、コンテキスト、およびmessageExchange変数

で呼び出され、それはあなたが実際にjdbcテストステップを実行せずにscript assertionを実行している場合か?スクリプト・アサーションに

、テストケース特性はグルービーステートメント下に使用してアクセスすることができる。

def propValue = context.testCase.getPropertyValue('PROPERTY_NAME') 
log.info "Property value is : ${propValue}" 

同じ上記のステートメントは同様Groovy Scriptテスト工程およびScript Assertionの両方で動作する必要があります。その後、あなたはテストケースのオブジェクトが必要な場合は場合

変更から:

def testCase = messageExchange.modelItem.testCase;

へ:

def testCase = context.testCase

編集:

質問の投稿者から、Script AssertionからJDBC応答を取得するように要求されました。 Script Assertionで提供されていますmessageExchange変数にもかかわらず

は、それがソープまたは休憩タイプのステップにのみ適用されます見えます。

しかし、ユーザーはまだ声明の下に使用してScript Assertionで応答にアクセスできるようにする必要があります

import groovy.xml.*  
log.info context.responseAsXml 
def responseSlurper = new XmlSlurper().parseText(context.responseAsXml) 
log.info responseSlurper.ResultSet.Row.size() 

enter image description here

+0

私は、** messageExchange **が利用可能であることを画面に示していることを認めます。しかし、私がそれを使用しようとすると、** null **オブジェクトとして認識されます。特定の** 'Property'テストステップ**からの値を取得することは、すでに説明したように** context **を使用することによって確実に達成できます。しかし、現在の** JDBCテストステップ**の応答を私のアサーションで取得するために、私は以下を使用しています: ** def responseSlurper = new XmlSlurper()。parseText(messageExchange.responseContent); **ここでもまた私はmessageExchangeもう一度** null ** –

+0

あなたの質問はすでに答えられていると思います。さて、別の質問です。どんな方法でも、 'def responseSlurper = new XmlSlurper()。parseText(context.response)'を使って同じものを取得してください。あなたは確信しています、あなたは最初の応答を持っていますか?以前に提供されたログステートメントを試しましたか? – Rao

+0

まず、context.responseを使用してもエラーは発生しませんでした。しかし、私が印刷したslurperは、以前のSOAPリクエストのレスポンスXMLを何らかの方法で入力する必要がありました。単純なJDBCレスポンスXMLだったはずです。そして、はい、JDBC応答はnullではありません。 –

関連する問題