1

我的目标:在我的测试中使用参数来切换环境,例如:

mvn test google-> 测试转到谷歌网站

mvn test bing-> 必应网站

“我需要为我的测试提供目标环境,它应该来自 pom.xml 并将它们用作参数。”

这对于 teamcity/jenkins 集成也非常有用。除此之外,我需要在测试中使用 url 作为变量。我怎样才能做到这一点?

配置文件可以成为 pom.xml 中的解决方案吗?

<profiles>
    <profile>
        <id>google</id>
        <properties>
            <base.url>http://www.google.com</base.url>
        </properties>
    </profile>
    <profile>
        <id>bing</id>
        <properties>
            <base.url>http://www.bing.com</base.url>
        </properties>
    </profile>
</profiles>

从构建部分:

<configuration>
   <systemProperties>
       <base.url>${base.url}</base.url>
   </systemProperties>
</configuration>

但是我怎样才能使用系统属性和整体方法是好的?谢谢!

4

1 回答 1

1

您可以将 配置maven-surefire-plugin为仅包含特定的测试类和运行mvn test. 默认情况下,mvn 将运行所有这些:

  • “**/Test*.java” - 包括其所有子目录和所有以“Test”开头的 Java 文件名。
  • “**/*Test.java” - 包括其所有子目录和所有以“Test”结尾的 Java 文件名。
  • “**/*Tests.java” - 包括其所有子目录和所有以“Tests”结尾的 Java 文件名。
  • “**/*TestCase.java” - 包括其所有子目录和所有以“TestCase”结尾的 Java 文件名。

但是您可以像这样指定要包含的测试:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.20.1</version>
        <configuration>
          <includes>
            <include>Sample.java</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

或排除:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.20.1</version>
        <configuration>
          <excludes>
            <exclude>**/TestCircle.java</exclude>
            <exclude>**/TestSquare.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

话虽如此,这可能不是最好的设计,通常,您应该使用一些测试框架,然后您可以根据需要进行配置。很少有例子是(或组合):jUnit、TestNG、Cucumber、Spring。

例如,在 Cucumber中,您可以拥有标签,然后您可以将其配置为测试执行的一部分。如果您使用 Jenkins,您的构建字段中可能会有这样的内容:

clean install -Dcucumber.options="--tags @Google

或者

clean install -Dcucumber.options="--tags @Bing

在 Spring中,您可以拥有可以像这样作为 Jenkins 作业运行的配置文件:

mvn clean test -Dspring.profiles.active="google"

编辑

或者,您可以在 pom 中定义一个自定义属性,如下所示:

<properties>
   <myProperty>command line argument</myProperty>
</properties>

然后像这样从命令行传递它:

mvn install "-DmyProperty=google"

编辑2

在命令行中提供-D前缀值是设置系统属性的一种方式。您可以从 Java 代码本身执行此操作,如下所示:

Properties props = System.getProperties();
props.setProperty("myPropety", "google");

或者简单地说:

System.setProperty("myPropety", "google");
于 2018-01-09T02:17:15.790 回答