Тесты Arquillian Graphene/Drone используют неверный порт для доступа к управляемому серверу WebLogic

Я использую Arquillian для выполнения интеграционных тестов для одного из моих проектов и обнаружил, что при развертывании приложения в контейнере WebLogic 12c R2 Arquillian Graphene/Drone использует неправильный номер порта для выполнения тестов браузера. Когда браузер запускается тестом, используется порт, назначенный серверу WebLogic Admin, а не порт, назначенный управляемому серверу WebLogic, что означает, что контейнер возвращает ошибку HTTP 404, вызывающую сбой тестового примера.

Я проработал код для различных компонентов Arquillian и считаю, что нашел основную причину проблемы. Похоже, проблема в классе RESTUtils модуля "wls-common", который содержит deploy(CommonWebLogicConfiguration config, Logger logger, Archive<?> archive) метод, который отвечает за развертывание архива на управляемом сервере WebLogic и возврат ProtocolMetaData вернуться к Arquillian. ProtocolMetaData впоследствии используется Arquillian Graphene/Drone для доступа к веб-странице.

В этом методе следующая строка кода HTTPContext httpContext = new HTTPContext(adminUrl.getHost(), adminUrl.getPort()); который раньше строил ProtocolMetaData объект. Это означает, что порт администратора используется вместо порта, назначенного Управляемому серверу.

Предполагая, что я правильно определил основную причину, я не верю, что этот адаптер контейнера Arquillian можно использовать с WebLogic 12c R2, что наводит меня на мысль, что я, возможно, пытаюсь использовать этот адаптер неправильно.

Зависимость Maven для адаптера контейнера WebLogic в моем файле POM выглядит следующим образом:

<dependency>
    <groupId>org.jboss.arquillian.container</groupId>
    <artifactId>arquillian-wls-remote-rest</artifactId>
    <version>1.0.0.Final</version>
</dependency>

Запись в моем файле arquillian.xml выглядит следующим образом:

<container qualifier="arquillian-weblogic-rest">
    <configuration>
        <property name="adminUrl">http://xxxx:7001</property>
        <property name="adminUserName">weblogic</property>
        <property name="adminPassword">xxxx</property>
        <property name="target">wls_server_1</property>
    </configuration>
    <protocol type="Servlet 3.0">
        <property name="host">xxxx</property>
        <property name="port">8080</property>
    </protocol>
</container>

Используемая версия WebLogic - 12.2.1.

Мой вопрос: я что-то упустил, пытаясь использовать этот адаптер контейнера для развертывания в контейнере WebLogic 12c R2? Кто-нибудь еще успешно использует этот адаптер?

Поскольку контейнер WebLogic работает на отдельном хосте, я считаю, что мне нужно использовать адаптер REST, а не удаленный адаптер, поскольку для удаленного адаптера требуется, чтобы тест Arquillian выполнялся на том же хосте, что и контейнер WebLogic.

1 ответ

Мне кажется, что вы запускаете тест, который должен быть запущен как клиент на сервере, а не как клиент. По умолчанию все тесты Arquillian будут выполняться на сервере приложений. Порт, который вы видите, используется, потому что вы должны использовать URL администратора для публикации развертывания на сервере. Вы хотите, чтобы ваши тесты запускались вне сервера как клиент, как и любой другой веб-браузер.

Существует три способа запуска теста в качестве клиента:

  1. Аннотировать класс @RunAsClient, который пометит все тесты как клиентские тесты.
  2. Аннотировать тест с @RunAsClientчто, как и следовало ожидать, будет применяться только к этому тесту.
  3. Установите развертывание на не тестируемое с помощью testable = false собственность @Deployment аннотаций. Любые тесты, ссылающиеся на это развертывание, будут клиентскими тестами.
Другие вопросы по тегам