我的目标:例如,使用参数在我的测试中切换环境:
mvn test google
- >测试进入谷歌网站
mvn test bing
- > 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>
但是我如何使用系统属性并且整体方法很好?谢谢!
答案 0 :(得分:1)
您可以将maven-surefire-plugin
配置为仅包含特定测试类和运行mvn test
。通过default,mvn将运行所有这些:
但您可以指定要包含的测试:
<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,你可能会在build fild中有这样的东西:
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");