私がしたこと
テスト中の 2 つのクライアント アプリケーションに特定のデータを提供するために、soapUI (3.6.1 無料版) モック サービスを使用しています。簡単な Groovy スクリプトを使用して、クライアント アプリケーションからの要求に基づいて特定のファイルから応答をフェッチするためのモック操作をセットアップしました。
モック応答の静的コンテンツは次のとおりです。
${responsefile}
操作ディスパッチ スクリプト ペインの groovy は次のとおりです。
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File("C:/soapProject/Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File("C:/soapProject/Test_Files/ID_List_CategoryB.xml").text
}
この例では、クライアント アプリケーションが文字列 CategoryA を含むモック サービスに要求を発行すると、soapUI によって返される応答はファイル ID_List_CategoryA.xml の内容です。
私が達成しようとしていること
これはすべて、groovy の絶対パスで正常に機能します。ここで、簡単に再展開できるように、soapUI プロジェクト ファイルと外部ファイルのコレクション全体をパッケージにプルしたいと考えています。soapUI について読んだことから、プロジェクトのリソース ルートの値を ${projectDir} に設定し、パスを次のように変更するのと同じくらい簡単になることを願っていました。
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File("Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File("Test_Files/ID_List_CategoryB.xml").text
}
... soapUI プロジェクトの xml ファイルは C:/soapProject/ にあることに注意してください
これまでに試したこと
だから、それはうまくいきません。相対パスのバリエーションを試しました:
- ./Test_Files/ID_List_CategoryA.xml
- /Test_Files/ID_List_CategoryA.xml
- Test_Files/ID_List_CategoryA.xml
ある投稿では、soapUI が相対パスの目的でプロジェクト ファイルの親ディレクトリをルートと見なす可能性があることを示していたため、次のバリエーションも試してみました。
- ./soapProject/Test_Files/ID_List_CategoryA.xml
- /soapProject/Test_Files/ID_List_CategoryA.xml
- soapProject/Test_Files/ID_List_CategoryA.xml
どれもうまくいかなかったとき、Groovy スクリプトで ${projectDir} プロパティを使用しようとしましたが、そのような試みはすべて「そのようなプロパティはありません: クラスの mockService: Script[n]」エラーで失敗しました。確かに、それをしようとしたとき、私は本当に手探りでした。
この投稿やその他の情報を使用してみました: How do I make soapUI attachment paths relative?
...運がない。その投稿のソリューション コードで「test」を「mock」に置き換えると (他の変更の中でも)、より多くのプロパティ エラーが発生しました。
testFile = new File(mockRunner.project.getPath())
.. につながった
No such property: mockRunner for class: Script3
私が必要だと思うもの
この問題に関連して私が見つけた投稿はすべて、soapUI TestSuites に焦点を当てています。MockService 中心のソリューション、または少なくとも TestSuite とは対照的に MockService で異なる方法で処理する方法に光を当てるソリューションが本当に必要です。
どんな助けでも大歓迎です。ありがとう。マーク。
解決策 - GargantuChet提供
${projectDir} プロパティにアクセスしようとする問題を解決し、groovy スクリプトのスコープ内で新しい projectDir オブジェクトを定義して相対パスを使用できるようにするために、GargantuChetによって提案された変更を以下に示します。
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def projectDir = groovyUtils.projectPath
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File(projectDir, "Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File(projectDir, "Test_Files/ID_List_CategoryB.xml").text
}