我在一个自动化测试框架上工作,在通过几个测试类的测试后,我需要关闭浏览器。
该项目的包结构类似于:
- 软件包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)
中实现决定关闭浏览器的自定义逻辑。