Arquillian和Open Liberty是否需要现有安装?

时间:2019-01-27 17:06:49

标签: testing open-liberty

我熟悉Tomcat / TomEE和使用Arquillian测试应用程序。现在正在切换到开放自由。我看到有一个用于Arquillian的模块,该模块使用嵌入式Open Liberty,但似乎需要现有的Open Liberty安装,其安装路径在配置中提供。由于安装必须以完全相同的路径进行,因此这使其不可携带,因此不适合自动化测试。 Arquillian和TomEE是独立的,无需安装。因此,我的问题是为什么“开放自由”还无法做到这一点?这是为将来计划的吗?

作为参考,这是将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,那就太好了。

3 个答案:

答案 0 :(得分:1)

如果您看看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 你会看到一个例子arquillian.xml该套$ wlpHome

 <property name="wlpHome">${wlp}</property>

来自环境变量$ wlp。 ( 'WLP' 是短的WebSphere自由资料)

在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

如果您还有其他疑问,请发表... 并希望您喜欢OpenLiberty-它震撼了!

戈登

答案 1 :(得分:0)

走得更远..所以以上就是我们进行自动化测试的方式 但它仍然使用该位置。

我知道,关于根本不需要指定任何位置,您会说: “你需要做的唯一的事情是添加一些Maven依赖的测试范围是拉在TomEE(嵌入式)如果同一会开放自由,这将是伟大的工作。”

所以,思维,Maven会放了一堆的类在classpath由于TomEE 相关性,然后测试运行将找到合适的容器来 上运行测试。

我将提出一个问题 https://github.com/OpenLiberty/liberty-arquillian/issues/39 覆盖要求,请随时添加备注等。

答案 2 :(得分:0)

您似乎想要实现的结果是使用Arquillian实现嵌入式自由运行。但是,据我所知,openliberty团队目前仅提供一个远程容器适配器和一个托管容器适配器。

由于我们有类似的需求,因此希望运行自动化集成测试,而不必在现场安装Openliberty服务器。我们设法使用 liberty-maven-plugin 解决此问题。

构建/测试过程将是:

  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. 作为默认情况下的 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>

这样,我们可以确保根据我们的喜好,可运行的自由服务器始终存在于我们的本地环境中,例如我们的Jenkins CI / CD服务器,实际上具有与嵌入式容器相同的效果。