2017-11-24 7 views
0

私はpact-jvmを使用して認証サービスをテストしたいと考えています。 私の要求では、ユーザ名を含むユーザを検証するためのメタデータや、Http Basic Authを使用するヘッダにも送信されるメタデータを含めて、html-bodyを投稿経由で送信しています。私は設定ファイルからusername + passwordを読んだ後、JUnit-Testで@TargetRequestFilterを使ってテストクラスにヘッダを追加します。 これは、アプリケーションが異なる層で実行されているためです。すべての層に別のユーザー名+パスワードの組み合わせがあります。そして協定はすべての階層で機能するはずです。また、ユーザーが変更したときには、自分の設定ファイルにほとんど変更を加えたくないだけです。それは、ユーザー名、パスワード、ホスト名、ポートとプロトコルを保持します。pact-jvm複数層の認証をテストする

問題は、毎回新しいpactファイルを作成せずにテストクラスで設定したヘッダーと一致するように、構成ファイルの内容に応じてリクエストのhtml-bodyを操作する必要があります。

私の質問は:JUnitクラスの中から期待しているhtml-body(pact経由)の選択部分を操作する方法はありますか?

多分私の問題を解決する別の方法がありますが、私はまだ見ていません。

ありがとうございます!明確にするために


要求の例:

<body> 
    <soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soap:body> 
      <ns2:authevalrequest1 
       xmlns:ns2="http://authgroup/authBRS/specification/ServiceView/AuthProvider/authBRS/"> 
       <inputmetadata> <version>V_1_0_0</version> <metadataentry> 
       <key>US</key> <value>some_username</value> </metadataentry> <metadataentry> 
       <key>MA</key> <value>some_user_id</value> </metadataentry> </inputmetadata> 
       <request> <attrs> <type>String</type> <values> 
       <value>some_user_id</value> </values> <xacml>urn:oasis:names:tc:xacml:1.0:subject:subject-id</xacml> 
       </attrs> <attrs> <type>String</type> <values> <value>00</value> 
       </values> <xacml>http://thisisaservice.com/resource/dataRES</xacml> 
       </attrs> <attrs> <type>String</type> <values> <value>abc</value> 
       </values> <xacml>http://thisisaservice.com/subject/authprofilename</xacml> 
       </attrs> <attrs> <type>String</type> <values> <value>importData</value> 
       </values> <xacml>http://thisisaservice.com/resource/CompanyfunctionRES</xacml> </attrs> 
       </request> 
      </ns2:authevalrequest1> 
     </soap:body> 
    </soap:envelope> 
</body> 

私はプロバイダまたは消費者を変更することはできません。私は検証作業をするためにここにいます。

編集:たぶん私は言うことを忘れていました...私は応答のボディを一致させたい(実際と予想どおり)、問題はありません。しかし、私は設定ファイルに応じてリクエストのhtml-bodyを変更する必要があります。

+0

...あなたの身体をあなたの認証にHTMLとして送信していますか?あるいは、あなたの認証サービスからHTMLを返していますか? –

+0

私は例を追加しました... – DerKnecht

答えて

0

ここでの問題は、JSONを使用してすべての検証を行うので、Pactが現在サポートしていないXMLの検証を試みていることです。あなたができることは単に文字列バリデーターか正規表現バリデーターを使うだけですが、文字列内の何かが(空白のように)変化すると、テストは検証されないかもしれません。

この時点では、出力を文字列にテンプレート化して相互作用を検証する方法を作成することができます。我々はXMLをサポートすることを検討してきましたが、関心はほとんどありません。

+0

ありがとうございます。私はすでにPactがXMLをサポートしていないと考えました。しかし、私の問題は検証ではありません。問題は次のとおりです。プロバイダに送信するリクエストの本文の一部を修正する機会を探しています。それはJSONを使用する場合でも可能ですか? JSONデータを送信する前に契約書のJSONデータを変更することはできますか? – DerKnecht

+1

ああ、それは理にかなっています。ここでは[provider states](https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-provider-junit#example-of-http-test)を使用することをお勧めします。消費者の立場からは、異なる状況ごとに複数の相互作用を作成し、異なるセットのデータを返します。プロバイダ内では、異なる状態を処理できるようにする必要があります。これにより、データが適切に設定されます。 –

+0

ドキュメントには、「プロバイダの状態は、消費者の状態やリクエストの内容に関するものではありません」と述べています。したがって、おそらく私はあなたの意見を得ていないか、問題を解決できません。プロバイダーの応答は、私が送信した要求に関連しています.Pactがプロバイダに対してテストされている間に要求を変更する必要があることを意味します。それは送信する前にプロバイダの状態を介して要求(本文)を変更することがどうにかできますか? – DerKnecht

関連する問題