如何解决@AfterTest注解方法抛出仅可注入ITestContext、XmlTest其一的TestNG异常
错误原因
TestNG中@AfterTest注解标记的方法是整个<test>标签对应的测试集执行完毕后才触发的全局收尾逻辑,官方仅支持向这类方法注入ITestContext、XmlTest两类参数,不支持注入代表单测试方法执行结果的ITestResult参数,你当前的参数声明不符合注入规则,因此抛出异常。
修复方案
根据你的实际业务需求选择对应方案即可:
方案1:调整为单测试方法收尾(最常用,匹配你当前统计单用例结果、失败截图的逻辑)
你当前的逻辑是统计单个用例的执行状态、失败后对应当前用例截图,本质是每个测试方法执行完就要跑的逻辑,把@AfterTest替换为@AfterMethod注解即可,@AfterMethod天然支持ITestResult参数注入。
修改后代码示例:
// 替换注解为AfterMethod @AfterMethod public void applicationTearDown(ITestResult it) { if(it.getStatus()==1) { pass++; } else if(it.getStatus() == 2) { String name = it.getName(); Utils.takeSnapshot(driver, PHOTO_PATH+name+".png"); fail++; } else if(it.getStatus() == 3) { skip++; } driver.quit(); }
方案2:保留@AfterTest全局收尾逻辑
如果你确实需要整个测试集跑完才执行收尾,需要删除方法的ITestResult入参,替换为支持的ITestContext参数,所有测试方法的执行结果可以从ITestContext中批量获取,示例代码:
@AfterTest public void applicationTearDown(ITestContext context) { // 从上下文获取所有用例执行结果统计 int pass = context.getPassedTests().size(); int fail = context.getFailedTests().size(); int skip = context.getSkippedTests().size(); // 其他全局收尾逻辑 driver.quit(); }
内容的提问来源于stack exchange,提问作者Bhoomika TU
相关产品推荐
相关产品推荐

