是否可以运行(通过maven)基于自定义注释选择junit selenium测试

时间:2016-12-01 19:12:36

标签: java maven selenium junit

试图在问题中获得所有好的关键字。基本上我有一些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

这是可能的,还是类似的东西?

1 个答案:

答案 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命令执行。

最好的运气