我们有由java测试类运行的selenium测试。
在本地环境中一切正常,但我想在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注释传递的某种形式的配置文件并考虑配置文件注释吗? :)
//更新: 可以使用类扩展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配置文件处于活动状态,但测试仍在运行)。
答案 0 :(得分:2)
@Profile
对测试类有零影响。因此,您应该只删除该注释。
如果您希望仅在给定系统属性具有特定值时启用测试类,则可以使用@IfProfileValue
。
但是,在您的方案中,如果给定的系统属性具有特定值(即spring.profiles.active
包含jenkins
),则您希望禁用测试类
更优雅的解决方案是使用JUnit 假设来使整个测试类忽略,而不是实现自定义ActiveProfileResolver
。假设失败。
这应该很适合你:
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的作者)