ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

unittest框架下的HTMLTestRunner报告通过与失败样式优化

2020-04-07 13:53:54  阅读:308  来源: 互联网

标签:TMPL HTMLTestRunner 样式 unittest else TEST REPORT OUTPUT self


  引言

  在很早之前,我写过一篇文章关于HTMLTestRunner报告优化的处理:https://www.cnblogs.com/liudinglong/p/12346824.html,后面群友在群里问了一个问题,是关于通过和失败的用例,图标样式和单击响应的问题。虽然很早之前已经帮群友解决了,由于之前工作繁忙,然而一直没有写下来,现在写下来,以便帮助更多的小伙伴们少走弯路。

  问题

  下面就是群友的问题:

 

 

 

  群友说我的博客没有关于这个问题的处理方法,好吧,先来看看是什么问题:

 

 

 

针对群友的截图,发现两个问题:

问题一:饼图位置不太友好

问题二:单击通过没有反应,或单击通过后,也没有显示日志。

 

  解决方案

  首先进入报告模板源码中,找到报告_generate_report_test,具体如下:

 def _generate_report_test(self, rows, cid, tid, n, t, o, e):
        # e.g. 'pt1.1', 'ft1.1', etc
        has_output = bool(o or e)
        # ID修改点为下划线,支持Bootstrap折叠展开特效 - Findyou
        tid = (n == 0 and 'p' or 'f') + 't%s_%s' % (cid+1,tid+1)
        name = t.id().split('.')[-1]
        if self.verbosity > 1:
            doc = t.shortDescription() or ""
        else:
            doc = ""

        desc = doc and ('%s: %s' % (name, doc)) or name
        if not PY3K:
            if isinstance(desc, str):
                desc = desc.decode("utf-8")
        # tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL or self.REPORT_TEST_NO_OUTPUT_TMPL
        tmpl = has_output and (n==0 and self.REPORT_TEST_NO_OUTPUT_TMPL or self.REPORT_TEST_WITH_OUTPUT_TMPL) or self.REPORT_TEST_NO_OUTPUT_TMPL

        # utf-8 支持中文 - Findyou
        # o and e should be byte string because they are collected from stdout and stderr?
        if isinstance(o, str):
            # uo = unicode(o.encode('string_escape'))
            if PY3K:
                uo = o
            else:
                uo = o.decode('utf-8', 'ignore')
        else:
            uo = o
        if isinstance(e, str):
            # ue = unicode(e.encode('string_escape'))
            if PY3K:
                ue = e
            elif e.find("Error") != -1 or e.find("Exception") != -1:
                es = e.decode('utf-8', 'ignore').split('\n')
                es[-2] = es[-2].decode('unicode_escape')
                ue = u"\n".join(es)
            else:
                ue = e.decode('utf-8', 'ignore')
        else:
            ue = e

        script = self.REPORT_TEST_OUTPUT_TMPL % dict(
            id=tid,
            output=saxutils.escape(uo + ue),
        )
        if getattr(t, 'imgs', []):
            # 判断截图列表,如果有则追加
            tmp = u""
            for i, img in enumerate(t.imgs):
                if i == 0:
                    tmp += """ <img src="data:image/jpg;base64,%s" style="display: block;" class="img"/>\n""" % img
                else:
                    tmp += """ <img src="data:image/jpg;base64,%s" style="display: none;" class="img"/>\n""" % img
            imgs = self.IMG_TMPL % dict(imgs=tmp)
        else:
            imgs = u"""无截图"""

        row = tmpl % dict(
            tid=tid,
            Class=(n == 0 and 'hiddenRow' or 'none'),
            style=n == 2 and 'errorCase' or (n == 1 and 'failCase' or 'passCase'),
            desc=desc,
            script=script,
            status=self.STATUS[n],
            img=imgs,
        )
        rows.append(row)
        if not has_output:
            return

    def _generate_ending(self):
        return self.ENDING_TMPL

  

这个函数主要处理测试结果如果展示在报告上的,整个看不懂没关系,只需要加个代码:

 

 

n == 2是通过的用例,就输出REPORT_TEST_WITH_OUTPUT_TMPL,否则输出REPORT_TEST_NO_OUTPUT_TMPL,

然后将REPORT_TEST_NO_OUTPUT_TMPL的内容改成与REPORT_TEST_WITH_OUTPUT_TMPL一直,再将button渲染成:btn-success。

 

接下来就是饼图了,修改位置:

 

 

  优化后的报告

  优化后,我们再运行一下脚本,查看报告:

 

 

回复群友的截图:

 

 

  

  自此,HTML报告优化到此结束。另外,喜欢自动化,测试开发的小伙伴可以加入我们学习交流QQ群:696400122。

标签:TMPL,HTMLTestRunner,样式,unittest,else,TEST,REPORT,OUTPUT,self
来源: https://www.cnblogs.com/liudinglong/p/12652471.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有