在几个测试类之后关闭浏览器



我在一个自动化测试框架上工作,在通过几个测试类的测试后,我需要关闭浏览器。

该项目的包结构类似于:

  • 软件包A
    • SomeTestClass1
    • SomeTestClass2
  • 包装B
    • 其他测试类1
    • 其他测试类别2

注意:包的内部可能有多个级别。

如果我使用@AfterClass或@AfterAll JUnit注释,我必须在每个测试类的"末尾"关闭浏览器。我的框架要求启动浏览器(作为一个静态变量(并只关闭一次,以加快执行速度,避免每次启动和登录浏览器都浪费时间,因为我目前每天晚上都需要运行大量测试。

我有可能做到这种行为吗?

JUnit4中,可以将Rule的概念与扩展TestWatcher抽象类(org.junit.rules.TestWatcher(结合使用。因此,您不必在用@AfterClass注释的方法中关闭浏览器。

例如

public class StartFinishTestWatcher extends TestWatcher {
@Override
protected void starting(Description description) {
System.out.println("Starting test: " + description.getDisplayName());
}
@Override
protected void finished(Description description) {
System.out.println("Finishing test: " + description.getDisplayName());
// close the browser here
}
}

然后,您可以在RuleChain中,在要关闭浏览器的测试类中使用此类。

public class MyTestInWhichIWantBrowserToClose {
@Rule
public RuleChain ruleChain = buildTestRuleChain();
private RuleChain buildTestRuleChain() { // could be made protected and put in a superclass
return RuleChain.outerRule(new StartFinishTestWatcher());
}
}

JUnit 5中,您可以创建自定义测试套件,并在一个基类中实现BeforeTestExecutionCallback和(在您的情况下(AfterTestExecution回调接口。

然后,您将在方法public void afterTestExecution(ExtensionContext context)中实现决定关闭浏览器的自定义逻辑。

相关内容

最新更新