使用 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");
我的目标:例如在我的测试中使用参数来切换环境:
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");