叨叨:唠唠呀,今天我们老大突然又发难我了,让我自动化框架里面实现当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脚本的人不需要关注。

    1. @Test
    2. public void test111() {
    3. // 获取当前测试结果
    4. ITestResult testResult= Reporter.getCurrentTestResult();
    5. Map<String, String> map = new HashMap<>(10);
    6. map.put("title", "提交bug:");
    7. map.put("url", "http://www.baidu.com");
    8. map.put("params", "xxxxxxxx");
    9. testResult.setParameters(new Object[]{map});
    10. }
    11. @AfterMethod
    12. public void after(ITestResult tr) {
    13. for (Object obj : tr.getParameters()) {
    14. Map<String, String> map2 = (Map<String, String>) obj;
    15. log.info(map2.get("url"));
    16. log.info(map2.get("params"));
    17. log.info("++++++++");
    18. }
    19. }

    控制台输出:
    image.png