3

我最近开始将我的项目从 ant 迁移到 maven。我的应用程序中有两个模块,我可以使用 maven 构建它们。

现在我有了自动化测试项目,它使用 Web Driver 来测试 UI 功能。我正在尝试使用 maven 构建两个模块战争并将它们部署到 tomcat 上。然后对它们运行自动化测试,如果自动化测试通过,则通过构建。我已经像这样配置了我的 pom(仅提及重要部分):

<packaging>pom</packaging>
<modules>
        <module>../module1</module>
        <module>../module2</module>
</modules>

现在这两个项目都得到了构建和部署,但它不运行自动化测试。我认为的原因是包装类型是POM。但是如果我把它改成战争,它就会开始抛出错误。

我可以考虑为自动化和父 pom 创建第三个 pom 以将其包含为模块。但我在想这是否是正确的方法。这应该是一个非常常见的场景,maven 应该直接支持它。

4

3 回答 3

4

(...) 自动化模块是用于测试 UI 的基于 WebDriver 的自动化测试。它依赖于网络战争,但没有包依赖。我正在使用 cargo maven 插件部署到 tomcat。我想在运行自动化测试之前从源代码构建网络战争,然后在tomcat上部署,然后运行测试。我可以使用 ant build 完成所有这些操作,但无法使用 maven

这绝对是可行的(我已经做过很多次了)。但是我不确定您当前的项目结构(尤其是测试所在的位置)。

这是我建议的结构:

.
├── 功能测试
│ ├── pom.xml // 这里我们配置 maven 运行 cargo & it 测试
│ └── src
│ └── 它
│ ├── java
│ │ └── ... // 功能测试会到这里
│ └── 资源
├── pom.xml // 聚合pom
└── mywebapp // 被测应用
    ├── pom.xml
    └── 源
        ├── 主要
        │ ├── java
        │ ├── 资源
        │ └── webapp
        └── 测试
            ├── java
            └── 资源

And for the details of the pom setup, have a look at Functional testing with Maven, Cargo and Selenium, it contains all the details required.

于 2010-10-08T04:07:27.483 回答
1

我不认为带有共享集成测试模块的 2 个战争模块是一个非常常见的场景。

但是,您可以与Hudson一起使用。

  • 在 Hudson 中设置一个作业来部署您的父级 pom,这将导致按照您当前的方式部署 war 模块。
  • 上一个作业成功后,触发另一个作业来运行集成测试。

您可能希望使用配置文件来激活集成测试,或者更具体地说是防止在第一个作业期间执行集成测试。

今年早些时候,我在大约一个小时内设置了一个基本的 Hudson 服务器。
Hudson 直接支持 maven 构建,还为您的项目 maven 站点提供位置,包括所有质量报告等。
您还可以将 Hudson 配置为“监视”您的 SCM,并在识别提交时启动构建。

于 2010-10-07T16:25:33.510 回答
0

“我可以考虑创建第三个 pom”
你只有两个 POM 吗?每个项目/模块都需要自己的 POM。

在此处查看有关使用 maven 进行集成测试的更多信息:http: //docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing

编辑: 我不完全了解您的项目布局是什么样的。但我想它应该看起来像这样:

文件结构

myWebApp/
    pom.xml
    myWebApp-web/
        pom.xml
    myWebApp-integration-tests/
        pom.xml

/myWebApp/pom.xml

<packaging>pom</packaging>
<modules>
    <!-- packaging: war; here are the sources and unit tests -->
    <module>myWebApp-web</module>

    <!-- packaging: java; here are the integration tests -->
    <module>myWebApp-integration-tests</module>
</modules>

使用此设置,/myWebApp/mvn deploy将执行以下步骤:

  1. 构建根项目(什么都不做,因为没有源)
  2. 构建 myWebApp-web
  3. 部署 myWebApp-web(必须在 中配置/myWebApp/myWebApp-web/pom.xml
  4. 在 myWebApp-integration-tests 中执行测试

这应该做你想要的。

于 2010-10-07T08:56:57.297 回答