使用 pom.xml 中的参数切换 selenium 测试环境 + 使用 mvn 命令行参数

Using parameters from pom.xml to switch environments for selenium tests + using mvn command line arguments

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

mvn test google -> Tests goes to google site

mvn test bing -> bing site

"I need to feed my tests which environment is the target and it should comes from the pom.xml and using them as arguments."

它对于 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>

但是我怎样才能使用系统属性,总的来说这个方法是好的?谢谢!

您可以配置 maven-surefire-plugin 以仅包含特定测试 类 和 运行 mvn test。通过 default,mvn 将 运行 所有这些:

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

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

<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"

EDIT2

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

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

或者简单地说:

System.setProperty("myPropety", "google");