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