背景
- 使用 maven-failsafe-plugin 進行集成測試
- 運行: mvn integration-test 執(zhí)行完所有的繼承測試(在@BeforeClass 中初始化環(huán)境, 在@AfterClass 中清理環(huán)境)
需求
在 mvn integration-test 命令后面增加參數(shù),在此設為instanceType。 若instanceType=Redis 則在@BeforeClass 中創(chuàng)建一個Redis實例; 若instanceType=Memcache 則在@BeforeClass 中創(chuàng)建一個Memcache 實例
PS: 當然也可以寫一份Redis 的測試代碼,一份Memcache的測試代碼,但是考慮到兩者大部分的測試代碼都是相同的,會造成大量代碼冗余,因此不考慮
實現(xiàn)
總體來說是在maven-failsafe-plugin 的configuration 中進行配置
基于environmentVariables 實現(xiàn)
- pom 中的property 配置
<properties>
<instance.type>Redis</instance.type>
</properties>
- pom 中的plugin 配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<!-- use mvn integration-test -Dinstance.type=Memcache to pass command line param -->
<environmentVariables>
<instanceType>${instance.type}</instanceType>
</environmentVariables>
<includes>
<include>com/aliyun/open/api/redisa/TestSuites.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
- 代碼中使用命令行參數(shù)instanceType
@BeforeClass
public static void suitesSetup() {
String dbInstanceId = null
if ("Memcache".equalsIgnoreCase(System.getenv("instanceType"))) {
// create memcache instance
} else {
// create redis instance
}
}
- 執(zhí)行命令示例
mvn integration-test -Dinstance.type=Memcache
基于systemPropertyVariables 實現(xiàn)
- pom 中的plugin 配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<!-- another way to pass command line param -->
<systemPropertyVariables>
<instanceType>Redis</instanceType>
</systemPropertyVariables>
<includes>
<include>com/aliyun/open/api/redisa/TestSuites.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
- 代碼中使用命令行參數(shù)instanceType
@BeforeClass
public static void suitesSetup() {
String dbInstanceId = null
if ("Memcache".equalsIgnoreCase(System.getProperty("instanceType"))) {
// create memcache instance
} else {
// create redis instance
}
}
- 執(zhí)行命令示例
mvn integration-test -DinstanceType=Memcache