Arquillian 和 Open Liberty 需要现有安装吗?

Arquillian and Open Liberty requires existing installation?

我熟悉 Tomcat/TomEE 并使用 Arquillian 测试应用程序。现在我们正在转向 Open Liberty。我看到有一个使用嵌入式 Open Liberty 的 Arquillian 模块,但它似乎需要一个现有的 Open Liberty 安装,其路径在配置中提供。这使得它不可移植,因此不适合自动化测试,因为安装必须存在于完全相同的路径中。 Arquillian 和 TomEE 是独立的,无需安装。因此,我的问题是,为什么 Open Liberty 也不可能做到这一点?这是未来的计划吗?

作为参考,这是将 Arquillian 与 TomEE/Tomcat 一起使用的方式:

<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://jboss.org/schema/arquillian"
    xsi:schemaLocation="http://jboss.org/schema/arquillian http://www.jboss.org/schema/arquillian/arquillian_1_0.xsd">
    <container qualifier="tomee" default="true">
        <configuration>
            <property name="httpPort">-1</property>
            <property name="stopPort">-1</property>
            <property name="users">user=pass</property>
        </configuration>
    </container>
</arquillian>

如您所见,没有 运行 测试所需的本地安装路径。您唯一需要做的就是在 test 范围内添加几个 Maven 依赖项,以引入 TomEE(嵌入式)。如果同样适用于 Open Liberty,那就太好了。

如果你看看https://github.com/OpenLiberty/open-liberty/blob/integration/dev/com.ibm.ws.microprofile.config.1.2_fat_tck/publish/tckRunner/tck/src/test/resources/arquillian.xml 您将看到一个设置 $wlpHome

的示例 arquillian.xml
 <property name="wlpHome">${wlp}</property>

来自环境变量 $wlp。 ('wlp' 是 Websphere Liberty Profile 的缩写)

此处managed/local容器中使用了wlpHome变量: https://github.com/OpenLiberty/liberty-arquillian/blob/42cb523b8ae6596a00f2e1793e460a910d863625/liberty-managed/src/main/java/io/openliberty/arquillian/managed/WLPManagedContainer.java#L224

动态执行此操作的一个示例是 系统 属性 ${wlp} 在这里: https://github.com/OpenLiberty/open-liberty/blob/95c266d4d6aa57cf32b589e7c9d8b39888176e91/dev/fattest.simplicity/src/componenttest/topology/utils/MvnUtils.java#L161

如果您有任何疑问,请 post 他们... 并希望您喜欢 OpenLiberty - 它很棒!

戈登

更进一步..以上就是我们做自动化测试的方法 但它仍然使用该位置。

我明白了,关于根本不需要指定任何位置,你说: "The only thing you need to do is a add a couple of Maven dependencies in test scope that pull in TomEE (embedded). If the same would work for Open Liberty that would be great."

所以,想一想,由于 TomEE,maven 会在类路径上放一堆 类 dependancies 然后测试 运行 会找到合适的容器 运行 正在测试。

我将在 https://github.com/OpenLiberty/liberty-arquillian/issues/39 为了满足要求,请随时添加备注等。

您似乎试图实现的结果是使用 arquillian 的嵌入式 运行自由时间。然而,据我所知,目前openliberty团队只提供了一个远程容器适配器和一个托管容器适配器。

我们有类似的需求,想要 运行 自动化集成测试,而我们不一定要有 Openliberty 服务器就地。我们设法使用 liberty-maven-plugin.

解决了这个问题

build/testing 过程将是:

  1. 运行 mvn verify, liberty-maven-plugin 将生成指定的 openliberty,我们希望 运行 我们的测试针对它。
                    <plugin>
                        <groupId>net.wasdev.wlp.maven.plugins</groupId>
                        <artifactId>liberty-maven-plugin</artifactId>
                        <version>${version.liberty-maven-plugin}</version> <!-- plugin version -->
                        <configuration>
                            <assemblyArtifact> <!-- Liberty server to run test against -->
                                <groupId>io.openliberty</groupId>
                                <artifactId>openliberty-runtime</artifactId>
                                <version>18.0.0.4</version>
                                <type>zip</type>
                            </assemblyArtifact>
                            <configDirectory>src/liberty/${env}/</configDirectory>
                            <configFile>src/liberty/server.xml</configFile>
                            <serverName>defaultServer</serverName>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>create-server</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
  1. As liberty-maven-plugin 默认情况下将 Liberty 服务器添加到 target/ 文件夹
<arquillian xmlns="http://jboss.org/schema/arquillian">
    <container qualifier="liberty-managed" default="true">
        <configuration>
            <property name="wlpHome">target/liberty/wlp</property>
            <property name="serverName">defaultServer</property>
        </configuration>
    </container>
</arquillian>

这样我们就可以确保根据我们的喜好 运行nable liberty 服务器始终存在于我们的本地环境中,例如我们的 Jenkins CI/CD 服务器,基本上获得与拥有嵌入式容器相同的效果。