【问题标题】:Arquillian Graphene/Drone tests use wrong port to access WebLogic managed serverArquillian Graphene/Drone 测试使用错误的端口访问 WebLogic 托管服务器
【发布时间】:2015-12-03 22:29:15
【问题描述】:

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

我已经研究了各种 Arquillian 组件的代码,并且我相信我已经找到了问题的根本原因。问题似乎出在“wls-common”模块的RESTUtils 类中,该模块包含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 一起使用,这让我觉得我可能试图错误地使用这个适配器。

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

【问题讨论】:

    标签: jakarta-ee weblogic jboss-arquillian arquillian-drone graphene2


    【解决方案1】:

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

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

    1. @RunAsClient 注释类,这会将所有测试标记为客户端测试。
    2. @RunAsClient 注释测试,正如您所料,它只适用于该测试。
    3. 使用@Deployment 注释的testable = false 属性将部署设置为不可测试。任何引用此部署的测试都将是客户端测试。

    【讨论】:

    • 感谢您的回答,但我已经在创建 Shrinkwrap 部署的方法上获得了注释 @Deployment(testable = false)。如果我部署到 Glassfish 或 Wildfly 容器,测试用例也可以正常工作,Arquillian 使用管理端口上传部署并使用普通 HTTP 端口运行测试。
    • 在这种情况下,这听起来像是一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2020-07-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    相关资源
    最近更新 更多