unittest框架下的HTMLTestRunner報告通過與失敗樣式優化


  引言

  在很早之前,我寫過一篇文章關於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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM