Spring 集成测试配置文件 class
Spring profiles on integration tests class
我们有 selenium 测试 运行 by java 测试 class。
在本地环境中一切正常,但我想在 jenkins 上 运行 时关闭这些测试。
所以我使用:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebIntegrationTest("server.port=1234")
@Profile("!jenkins")
@ActiveProfiles("integrationtests")
public class LoginAndEditProfileSeleniumTest {
...
什么有效:
运行宁 mvn clean test
运行 所有本地测试, integrationtests
配置文件处于活动状态。我不想传递任何额外的参数。
我想达到的目标:
运行宁 mvn clean test -Dspring.profiles.active=jenkins
关闭此测试。
我能否以某种方式合并参数传递的配置文件、ActiveProfile 注释并考虑配置文件注释? :)
//更新:
可以使用 class 扩展 ActiveProfilesResolver:
public class ActiveProfileResolver implements ActiveProfilesResolver {
@Override
public String[] resolve(Class<?> testClass) {
final String profileFromConsole = System.getProperty("spring.profiles.active");
List<String> activeProfiles = new ArrayList<>();
activeProfiles.add("integrationtests");
if("jenkins".contains(profileFromConsole)){
activeProfiles.add("jenkins");
}
return activeProfiles.toArray(new String[activeProfiles.size()]);
}
}
但它似乎不与@Profile 合作(jenkins 配置文件处于活动状态但测试仍在 运行ning)。
@Profile
对测试 class 的影响 为零 。因此,您应该简单地删除该注释。
如果你想启用测试class只有当给定系统属性存在特定值时,你可以使用@IfProfileValue
.
但是,在您的场景中,如果给定系统 属性 存在特定值(即,如果 spring.profiles.active
包含 jenkins
).
不是实现自定义 ActiveProfileResolver
,更优雅的解决方案是使用 JUnit 假设 使整个测试 class 成为 忽略 如果假设失败。
这应该很适合你:
import static org.junit.Assume.*;
// ...
@BeforeClass
public static void disableTestsOnCiServer() {
String profilesFromConsole = System.getProperty("spring.profiles.active", "");
assumeFalse(profilesFromConsole.contains("jenkins"));
}
此致,
Sam(Spring TestContext Framework 的作者)
我们有 selenium 测试 运行 by java 测试 class。
在本地环境中一切正常,但我想在 jenkins 上 运行 时关闭这些测试。
所以我使用:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebIntegrationTest("server.port=1234")
@Profile("!jenkins")
@ActiveProfiles("integrationtests")
public class LoginAndEditProfileSeleniumTest {
...
什么有效:
运行宁 mvn clean test
运行 所有本地测试, integrationtests
配置文件处于活动状态。我不想传递任何额外的参数。
我想达到的目标:
运行宁 mvn clean test -Dspring.profiles.active=jenkins
关闭此测试。
我能否以某种方式合并参数传递的配置文件、ActiveProfile 注释并考虑配置文件注释? :)
//更新: 可以使用 class 扩展 ActiveProfilesResolver:
public class ActiveProfileResolver implements ActiveProfilesResolver {
@Override
public String[] resolve(Class<?> testClass) {
final String profileFromConsole = System.getProperty("spring.profiles.active");
List<String> activeProfiles = new ArrayList<>();
activeProfiles.add("integrationtests");
if("jenkins".contains(profileFromConsole)){
activeProfiles.add("jenkins");
}
return activeProfiles.toArray(new String[activeProfiles.size()]);
}
}
但它似乎不与@Profile 合作(jenkins 配置文件处于活动状态但测试仍在 运行ning)。
@Profile
对测试 class 的影响 为零 。因此,您应该简单地删除该注释。
如果你想启用测试class只有当给定系统属性存在特定值时,你可以使用@IfProfileValue
.
但是,在您的场景中,如果给定系统 属性 存在特定值(即,如果 spring.profiles.active
包含 jenkins
).
不是实现自定义 ActiveProfileResolver
,更优雅的解决方案是使用 JUnit 假设 使整个测试 class 成为 忽略 如果假设失败。
这应该很适合你:
import static org.junit.Assume.*;
// ...
@BeforeClass
public static void disableTestsOnCiServer() {
String profilesFromConsole = System.getProperty("spring.profiles.active", "");
assumeFalse(profilesFromConsole.contains("jenkins"));
}
此致,
Sam(Spring TestContext Framework 的作者)