Как запустить две фиктивные веб-службы с разными URL-адресами на одном порту с помощью цитрусовых?

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

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

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


person supertramp    schedule 31.10.2016    source источник


Ответы (1)


Вы почти там. Удалите параметр servlet-mapping-path и используйте этот экстрактор ключа сопоставления:

<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 в простой стратегии сопоставления.

person Christoph Deppisch    schedule 02.11.2016