叨叨:唠唠呀,今天我们老大突然又发难我了,让我自动化框架里面实现当case脚本运行失败后,自动把bug提交到bug管理平台,并附上一些信息。 我咋整?
唠唠:看起来跨系统了难度很大,其实呢也是容易的。我这有个思路,不过这个思路的前提是,你的bug管理系统需要给你提供一个提交bug的API。
叨叨:这个有,bug管理系统都是前后端分离,提交bug的API有。
唠唠:有API,那就想想什么时候调用这个API,并按要求给予合适的入参?
叨叨:何时调用API?
唠唠:既然要自动提交,又是case脚本实现失败下,那这个思路就跟失败自动化截图一样,我们得重写监听器 TestListenerAdapter ,在onTestFailure()中加入调用 提交bug的API。那这个过程我就不具体给代码演示了。
叨叨:嗯,这个好办,可是API的入参,我怎么传递过去?
唠唠:这时就得用到 TestNG 提供的 ITestResult ,ITestResult 提供了getParameters() 和 setParameters()方法,那就是我们执行每一个Case脚本时调用到 setParameters() 把API需要的入参或者说你bug需要提交的信息保留下来,最后监听那通过getParameters()再获取出来。
唠唠:来,具体给你个demo让你看下如何获取和赋值,demo我就不重写 TestListenerAdapter 监听器了,直接用@AfterXXX 来演示获取值,然后设置值我也直接写用例里面,实际工程你要抽取出去让真正写case脚本的人不需要关注。
@Test
public void test111() {
// 获取当前测试结果
ITestResult testResult= Reporter.getCurrentTestResult();
Map<String, String> map = new HashMap<>(10);
map.put("title", "提交bug:");
map.put("url", "http://www.baidu.com");
map.put("params", "xxxxxxxx");
testResult.setParameters(new Object[]{map});
}
@AfterMethod
public void after(ITestResult tr) {
for (Object obj : tr.getParameters()) {
Map<String, String> map2 = (Map<String, String>) obj;
log.info(map2.get("url"));
log.info(map2.get("params"));
log.info("++++++++");
}
}
控制台输出: