我正在使用Arquillian对我的一个项目执行集成测试,并发现当应用程序部署到WebLogic 12c R2容器时,Arquillian Graphene / Drone正在使用错误的端口号来执行浏览器测试。当测试启动浏览器时,将使用分配给WebLogic Admin Server的端口而不是分配WebLogic Managed Server的端口,这意味着容器返回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容器相同的主机上运行。
答案 0 :(得分:1)
听起来我正在运行一个应该作为客户端在服务器而不是客户端运行的测试。默认情况下,所有Arquillian测试都将在应用程序服务器中运行。您正在使用的端口正在使用,因为您必须使用管理URL将部署发布到服务器。您希望您的测试作为客户端在服务器外部运行,就像任何其他Web浏览器一样。
将测试作为客户端运行有三种方法:
@RunAsClient
注释类,它将所有测试标记为客户端测试。 @RunAsClient
注释测试,正如您所期望的那样只适用于该测试。 testable = false
注释的@Deployment
属性将部署设置为不可测试。引用此部署的任何测试都将是客户端测试。