2016-10-31 4 views
0

Я изучаю Citrus Framework, чтобы использовать его в автоматизации тестирования моего проекта. Я хочу, чтобы запустить два веб-сервисов, позволяет назвать его:Как запустить два ложных веб-сервиса с разными URL-адресами на одном и том же порту с цитрусовыми?

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" /> 

мне это нужно в тот же порт. Я также попытался написать свой собственный DispatchingEndpointAdapter и каким-то образом извлечь контекстный путь из запроса сообщения, но не удался ..

<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> 

Я не могу найти URL в параметре запроса типа com.citrus.message. Сообщение ..

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 на том же порту? Я хочу отличить их по URL-адресу, а не к самой полезной нагрузке ... (по peyload было бы легко использовать выше пользовательского MappingKeyExtractor, поскольку объект Message содержит полезную нагрузку)

Пожалуйста, помогите! Я не могу поверить, что Citrus Framework может быть настолько плохо спроектирован, что пропустил такое базовое требование теста.

ответ

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> 

Это будет отображать входящие запросы, основанные на пути запроса. Таким образом, вы можете добавлять сопоставления с ключами /service1 и /service2 в простой стратегии сопоставления.

+0

спасибо. Оно работает! – supertramp