0

我正在使用 Arquillian 为我的一个项目执行集成测试,并发现当应用程序部署到 WebLogic 12c R2 容器时,Arquillian Graphene/Drone 使用了错误的端口号来执行浏览器测试。测试启动浏览器时,使用分配给 WebLogic 管理服务器的端口,而不是分配给 WebLogic 托管服务器的端口,这意味着容器返回 HTTP 404 错误,导致测试用例失败。

我已经研究了各种 Arquillian 组件的代码,并且我相信我已经找到了问题的根本原因。问题似乎出在“wls-common”模块的RESTUtilsdeploy(CommonWebLogicConfiguration config, Logger logger, Archive<?> archive)类中,该模块包含负责将存档部署到 WebLogic 托管服务器并将其ProtocolMetaData返回给 Arquillian 的方法。Arquillian Graphene/Drone随后ProtocolMetaData使用它来访问网页。

在此方法中是 HTTPContext httpContext = new HTTPContext(adminUrl.getHost(), adminUrl.getPort());用于构建ProtocolMetaData对象的以下代码行。这意味着正在使用管理端口,而不是分配给托管服务器的端口。

假设我已经正确确定了根本原因,我不相信这个 Arquillian 容器适配器可以与 WebLogic 12c R2 一起使用,这让我觉得我可能试图错误地使用这个适配器。

我的 POM 文件中 WebLogic 容器适配器的 Maven 依赖项如下:

<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 容器在同一主机上运行。

4

1 回答 1

1

在我看来,您正在运行一个应该作为客户端而不是客户端运行的测试。默认情况下,所有 Arquillian 测试都将在应用程序服务器中运行。您看到的端口正在被使用,因为您必须使用管理 URL 将部署发布到服务器。您希望您的测试作为客户端在服务器之外运行,就像任何其他 Web 浏览器一样。

作为客户端运行测试的三种方法:

  1. 用 注释类@RunAsClient,这会将所有测试标记为客户端测试。
  2. 用 注释测试@RunAsClient,正如您所期望的那样,它仅适用于该测试。
  3. 使用注解的testable = false属性将部署设置为不可测试。@Deployment任何引用此部署的测试都将是客户端测试。
于 2015-12-04T15:43:39.573 回答