试图在问题中获得所有好的关键字。基本上我有一些selenium测试,使用JUnit4 / Maven并创建一个自定义注释来标记每个测试的一些基本信息:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestInfo {
public enum Priority { LOW, MEDIUM, HIGH }
Priority priority() default Priority.LOW;
String useCase() default "";
String createdBy() default "unknown";
String lastModified() default "unknown";
}
所以每个测试都是这样的:
@Test
@TestInfo(priority = TestInfo.Priority.HIGH,
createdBy = "MivaScott",
lastModified = "2016/11/29",
useCase = "Log into website with valid credentials")
public void loginValidCredentials() throws Exception {
Properties user = Data.getUserCredentials("default");
loginPage.setLogin(user.getProperty("username"));
loginPage.setPassword(user.getProperty("password"));
loginPage.clickSignInButtonAndWait();
Verify.titleContains(MyConstants.TITLE_DASHBOARD, "");
}
我希望的是,我可以在命令上指定只运行标记为高优先级的测试。所以有一些效果:
mvn -DTestInfo.priority=HIGH test
这是可能的,还是类似的东西?
答案 0 :(得分:0)
我可以通过两种方式来解决这个问题。
创建一个自定义测试运行器,用于解析系统属性,并仅使用匹配的注释运行测试方法。
public class PrioritzedTestRunner extends BlockJUnit4ClassRunner {
@Override
protected void runChild(final FrameworkMethod method, RunNotifier notifier) {
String priority = System.getProperty("TestInfo.priority");
TestInfo info = method.getAnnotation(TestInfo.class);
if (priority == null || info == null) {
//If the configuration is blank or the test is uncategorized then run it
super.runChild(method, notifier);
} else if (priority != null) {
//try to resolve the priority and check for a match.
TestInfo.Priority configPri = TestInfo.Priority.valueOf(priority.toUpperCase());
if (info.equals(configPri)) {
super.runChild(method, notifier);
}
}
}
您需要将RunWith注释添加到测试类中。
@RunWith(PrioritizedTestRunner.class)
public voidMyTestClass() {
@Test
@TestInfo(...)
public void testThing1(){}
@Test
@TestInfo(...)
public void testThing2(){}
}
如果测试是相当静态的,请将它们分成类而不是注释,并使用自定义maven配置文件根据常用文件或资源执行测试集合。
我自己还没有配置,但我已经看到它完成了。你应该能够有针对你的PriorityLevels的maven测试阶段 http://maven.apache.org/guides/introduction/introduction-to-profiles.html
如果我正确阅读文档,那么您应该能够将每个优先级作为单独的mvn命令执行。
最好的运气