博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
reportNG定制化之失败截图及日志
阅读量:6979 次
发布时间:2019-06-27

本文共 6789 字,大约阅读时间需要 22 分钟。

先从github上拉下 reportNg的源代码  

 

拉下源码后我们使用IDEA进行导入

1、reportng.properties 增加部分类表项

        这里我们直接在末尾添加

log=Log Infoscreenshot=Screen Shotduration=Duration

  

2、results.html.vm 修改结果的html,我们目前只修改fail的情况下。

#if ($failedTests.size() > 0)  
#foreach ($testClass in $failedTests.keySet())
#set ($classResults = $failedTests.get($testClass)) #parse ("org/uncommons/reportng/templates/html/class-results.html.vm") #end
$messages.getString("failedTests")
$testClass.name $messages.getString("duration") $messages.getString("log") $messages.getString("screenshot")
#end

3、我们在class-results.html.vm中最后加入一列,来显示图片,注意我们使用的是$utils.getImageString($line)而不是$utils.escapeHTMLString($utils.removeImage($line))

      #set ($output = $utils.getTestOutput($testResult))      #if ($output.size() > 0)          
#foreach( $line in $output ) #if ($meta.shouldEscapeOutput()) $utils.getImageString($line)
#else $utils.getImageString($line)
#end #end
#end

  上面出现的两个方法getImageString,removeImage。 就是提取含有img标签的字符串和去除带有img标签的字符串。 

可以在ReportNGUtils.java中看到,生成到报告中的内容如果用escapeHTMLString会被转义,这里插入的图片我们之后通过Reporter.log()方式写入,因此写入的标签我们不希望被转义。

public String escapeString(String s)    {        if (s == null)        {            return null;        }        StringBuilder buffer = new StringBuilder();        for(int i = 0; i < s.length(); i++)        {            buffer.append(escapeChar(s.charAt(i)));        }        return buffer.toString();    }    /**     * Converts a char into a String that can be inserted into an XML document,     * replacing special characters with XML entities as required.     * @param character The character to convert.     * @return An XML entity representing the character (or a String containing     * just the character if it does not need to be escaped).     */    private String escapeChar(char character)    {        switch (character)        {            case '<': return "<";            case '>': return ">";            case '"': return """;            case '\'': return "'";            case '&': return "&";            default: return String.valueOf(character);        }    }        public String escapeHTMLString(String s)    {        if (s == null)        {            return null;        }        StringBuilder buffer = new StringBuilder();        for(int i = 0; i < s.length(); i++)        {            char ch = s.charAt(i);            switch (ch)            {                case ' ':                    // All spaces in a block of consecutive spaces are converted to                    // non-breaking space ( ) except for the last one.  This allows                    // significant whitespace to be retained without prohibiting wrapping.                    char nextCh = i + 1 < s.length() ? s.charAt(i + 1) : 0;                    buffer.append(nextCh==' ' ? " " : " ");                    break;                case '\n':                    buffer.append("
\n"); break; default: buffer.append(escapeChar(ch)); } } return buffer.toString(); }

4.ReportNGUtils.java 新增两个方法

public String getImageString(String s){    String regex = "(
)"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(s); while (matcher.find()) { String group = matcher.group(1); //可根据实际情况多个图片 全部一起return return group; } return "";}public String removeImage(String s){ return s.replaceAll("
","");}

5.下来就是我们的测试代码了。实际上就是用例结束的时候判断结果是否失败,是的话就将你设置的图片写入report。我们这里还实现了点击图片在新窗口显示大图的功能,由于我们的图片名称为x:\xx\xx\xx.png,放入window.open语句中需要转义,我们将x:\xx\xx\xx.png转换为x:\\xx\\xx\\xx.png

@AfterMethod(alwaysRun = true)    public void afterMethod(ITestResult result) throws Exception {        if (!result.isSuccess())            catchExceptions(result);    }    public void catchExceptions(ITestResult result) {        System.out.println("result" + result);        String methodName = result.getName();        System.out.println(methodName);        if (!result.isSuccess()) {            File file = new File("snapshot");            Reporter.setCurrentTestResult(result);            System.out.println(file.getAbsolutePath());            Reporter.log(file.getAbsolutePath());            String filePath = file.getAbsolutePath();            String dest = result.getMethod().getRealClass().getSimpleName()+"."+result.getMethod().getMethodName();            String picName=filePath+File.separator+dest+super.runtime;            String escapePicName=escapeString(picName);            System.out.println(escapePicName);            String html="";            Reporter.log(html);        }    }        /**     * 替换字符串     * @param 待替换string     * @return 替换之后的string     */    public String escapeString(String s)    {        if (s == null)        {            return null;        }        StringBuilder buffer = new StringBuilder();        for(int i = 0; i < s.length(); i++)        {            buffer.append(escapeChar(s.charAt(i)));        }        return buffer.toString();    }    /**     * 将\字符替换为\\     * @param 待替换char     * @return 替换之后的char     */    private String escapeChar(char character)    {        switch (character)        {            case '\\': return "\\\\";            default: return String.valueOf(character);        }    }

6.OK,以上我们已经完成了失败时图片写入report的代码,下面我们还要设置一下reportNG中的pom.xml;

org.apache.maven.plugins
maven-surefire-plugin
2.17
false
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8

7.接下来,我们开始打包reportNG项目; 

右键build.xml,选择Add as Ant Build File 

 

此时IDEA右侧出现ant打包步骤,我们双击release开始打包吧!

 

 

打包成功

 

若出现(请使用 -source 7 或更高版本)等错误,需要在build.xml加入你的source和target版本(JDK版本) 

 

  

这是因为reportNG通过antlib外部lib文件 uncommons-antlib-0.3.2.jar进行依赖,使用Ant build进行release的,查看uncommons-antlib文件,打开其中antlib.xml,我们可以发现其编译指定默认的jdk版本为1.5,所以如果出现版本问题,请如上修改。 

这里写图片描述

至此,我们可以去reportng-master\release取我们的jar包了,最终失败截图效果如下 

 

转载:https://blog.csdn.net/jjj0817/article/details/74626511
 
你可能感兴趣的文章
C语言OJ项目参考(2569)统计字符串种类
查看>>
用线性回归无编码实现文章浏览数预测
查看>>
视觉设计-CRUD
查看>>
服务器散热问题老大难!液体降温冷却方式你试过了吗?
查看>>
paxos算法证明过程
查看>>
如何把数据从 Mysql 导入到 Greenplum
查看>>
MongoDB Secondary同步慢问题分析
查看>>
mysql主主同步
查看>>
Gps坐标转换成gcj 02坐标的js代码
查看>>
换绑中交互的注意事项
查看>>
【原创】MySQL Proxy - connect_server()
查看>>
MySQL 5.7 增强的离线分析工具innochecksum
查看>>
【Android】用MediaRecorder录制视频太短崩的问题
查看>>
IO多路复用之poll总结
查看>>
解决服务器复制中SID冲突问题
查看>>
Bridge网络模式下Linux虚拟机和主机进行通信
查看>>
html5样式布局技巧总结
查看>>
ARC Best Practices[转]
查看>>
Linux管道操作
查看>>
Error &#39;Can&#39;t drop database &#39;just&#39;; database doesn&#39;t exist&#39; on query.
查看>>