执行派生类内@Test用例时基类的TestNG注解是如何运行的?
问题核心原因:TestNG的注解继承特性
这是TestNG原生提供的能力,不需要额外配置就能生效,底层逻辑如下:
- TestNG在加载测试类时,会递归扫描当前类以及它所有父类的方法,识别所有带TestNG注解(包括@Test、@BeforeMethod、@AfterMethod等)的方法
- 只要父类的配置方法不是
private修饰,就会被纳入当前测试类的执行流程中:- 所有
@BeforeMethod注解的方法会在每一个@Test方法执行前运行 - 所有
@AfterMethod注解的方法会在每一个@Test方法执行后运行
- 所有
你给出的代码中,TestBase的setup()和tearDown()都是public修饰的,完全符合继承要求,因此LoginTest作为子类运行测试时,就会自动触发父类的这两个方法执行。
这种写法的优势
这是UI自动化测试的通用最佳实践:
- 通用的浏览器初始化、环境地址加载、资源销毁逻辑全部抽离到父类,不用每个测试类重复编写,大幅减少冗余代码
- 后续新增测试类只需要继承TestBase,就能直接复用通用逻辑,不用额外处理启动关闭浏览器的逻辑
扩展说明
如果子类中也定义了带@BeforeMethod/@AfterMethod注解的方法,TestNG默认会先执行父类的配置方法,再执行子类的配置方法,你也可以通过priority参数调整执行顺序。
内容的提问来源于stack exchange,提问作者M Reus
相关产品推荐
相关产品推荐

