2016-10-31 15 views
0

私はプロジェクトのテスト自動化にCitrix Frameworkを使用するためにCitrus Frameworkを調査しています。 2つのWebサービスを実行したいのですが、名前をつけてみましょう:シトラスと同じポート上の異なるURLを持つ2つの模擬Webサービスを実行するには?

http://localhost:port/service1 
http://localhosr:port/sercice2 

そして、私のSUT(テスト対象システム)を呼び出してください。 SUTは上の両方の模擬サービス(service1 & service2)を同期して呼び出し、答えを返します。

私はそれを行うことができたが、別のポート上:

<citrus-ws:server id="helloMockService1" 
      port="${server.port1}" 
      servlet-mapping-path="/service1" 
      auto-start="true" 
      timeout="10000" 
      endpoint-adapter="genericResponseAdapter1" /> 

    <citrus-ws:server id="helloMockService2" 
      port="${server.port2}" 
      servlet-mapping-path="/service2" 
      auto-start="true" 
      timeout="10000" /> 

私は、同じポートでそれを必要とします。私はタイプcom.citrus.messageのリクエストパラメータにURLを見つけるカント

<citrus:dispatching-endpoint-adapter id="dispatchingEndpointAdapter" 
     mapping-key-extractor="mappingKeyExtractor" 
     mapping-strategy="mappingStrategy"/> 

<bean id="mappingStrategy" 
    class="com.consol.citrus.endpoint.adapter.mapping.SimpleMappingStrategy"> 
    <property name="adapterMappings"> 
     <map> 
      <entry key="service1" value-ref="genericResponseAdapter1"/> 
      <entry key="service2" value-ref="genericResponseAdapter2"/> 
     </map> 
    </property> 
</bean> 

<bean id="mappingKeyExtractor" 
    class="com.mycompany.citrus.CustomExtractor"> 

</bean> 

..また、私のカスタムDispatchingEndpointAdapterを書いて、何とか要求メッセージからコンテキストパスを抽出しようとしましたが、成功しませんでした。メッセージ..

package com.mycompany.citrus; 

import com.consol.citrus.endpoint.adapter.mapping.MappingKeyExtractor; 
import com.consol.citrus.message.Message; 

public class CustomExtractor implements MappingKeyExtractor{ 

    @Override 
    public String extractMappingKey(Message request) { 

     // ther is no URL information in Message object!!!!!!!!!!!! 
     return "service1"; 
    } 

} 

Citrus Frameworkで2つのモックサービスを同じポートで実行するにはどうすればよいですか?ペイロード自体ではなく、URLで区別したいと思います...(メッセージオブジェクトにペイロードが含まれているので、上記のカスタムMappingKeyExtractorを使用すると簡単になります)

助けてください!シトラスフレームワークがこのような基本的なテスト要件を見落としてしまったようにひどく設計されている可能性は否定できません。

答えて

1

あなたはほとんどそこにいます。リクエストのパスに基づいて着信要求をマップします

<bean id="mappingKeyExtractor" class="com.consol.citrus.endpoint.adapter.mapping.HeaderMappingKeyExtractor"> 
    <property name="headerName" value="#{T(com.consol.citrus.http.message.HttpMessageHeaders).HTTP_REQUEST_URI}"/> 
</bean> 

:このマッピングキー抽出をのservlet-mapping-パス設定を削除し、使用しています。したがって、単純なマッピング戦略では/service1/service2というキーを持つマッピングを追加できます。

+0

ありがとうございました。できます! – supertramp

関連する問題