基于HTMLTestRunner0.8.2版本修改HTMLTestRunner.py

文章介绍了如何基于HTMLTestRunner0.8.2版本进行修改以适配Python3.5以上的语法,包括将StringIO替换为io,调整print语句,以及处理字节编码问题。此外,提供了两种解决方案:一是暴力解决,直接修改源代码以满足特定需求,如显示pass结果和添加测试人员信息;二是优雅地通过继承和重载HTMLTestRunner类来添加自定义功能,如添加测试人员变量和自定义报告属性。
摘要由CSDN通过智能技术生成

基于HTMLTestRunner0.8.2版本修改HTMLTestRunner.py

一、适配python3.5以上

94行修改import StringIo为import io
539行修改self.outputBuffer = StringIo.StringIO() 为 self.outputBuffer = io.StringIO()
631行修改 print >> sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime) 为 print(sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime))
642行修改 if not rmap.has_key(cls):为if not cls in rmap:
766行修改 uo = o.decode(‘latin-1’) 修改成 uo = e
775行修改 ue = o.decode(‘latin-1’) 修改成 ue = e

1、暴力解决问题

1.1 结果为pass也进行输出,但只输出print打印的结果

760行修改 tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL or self.REPORT_TEST_NO_OUTPUT_TMPL 为
if n == 2:
tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL
else:
tmpl = self.REPORT_TEST_WITH_OUTPUT_TMPL
766行修改 uo = e 修改成 uo = o

1.2 添加测试人员(添加其他变量均可以如此)

610行添加一个变量tester
672行添加(‘Tester’, self.tester)

2、优雅解决问题

"""
对HTMLTestRunner中HTMLTestRunner方法进行继承和重载
"""
from xml.sax import saxutils
import sys
from HtmlTestRunner import HTMLTestRunner


class HTMLTestRunnerEdit(HTMLTestRunner):

    def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None, tester=None):
        """
        增加变量测试人员
        """
        super().__init__(stream=stream, verbosity=verbosity, title=title, description=description)
        if tester is not None:
            self.tester = tester
        else:
            self.tester = '测试'

    def getReportAttributes(self, result):
        """
        Return report attributes as a list of (name, value).
        Override this to add custom attributes.
        """
        startTime = str(self.startTime)[:19]
        duration = str(self.stopTime - self.startTime)
        status = []
        if result.success_count:
            status.append('Pass %s' % result.success_count)
        if result.failure_count:
            status.append('Failure %s' % result.failure_count)
        if result.error_count:
            status.append('Error %s' % result.error_count)
        if status:
            status = ' '.join(status)
        else:
            status = 'none'
        return [
            ('Start Time', startTime),
            ('Duration', duration),
            ('Status', status),
            ('Tester', self.tester),
        ]

    def _generate_report_test(self, rows, cid, tid, n, t, o, e):
        """
        重载后解决:
        1、pass状态也能输出结果
        """
        # e.g. 'pt1.1', 'ft1.1', etc
        has_output = bool(o or e)
        tid = (n == 0 and 'p' or 'f') + 't%s.%s' % (cid+1, tid+1)
        name = t.id().split('.')[-1]
        doc = t.shortDescription() or ""
        desc = doc and ('%s: %s' % (name, doc)) or name
        if n == 2:
            tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL
        else:
            tmpl = self.REPORT_TEST_WITH_OUTPUT_TMPL
        # o and e should be byte string because they are collected from stdout and stderr?
        uo = o
        ue = e

        script = self.REPORT_TEST_OUTPUT_TMPL % dict(
            id=tid,
            output=saxutils.escape(uo+ue),
        )
        row = tmpl % dict(
            tid=tid,
            Class=(n == 0 and 'hiddenRow' or 'none'),
            style=n == 2 and 'errorCase' or (n == 1 and 'failCase' or 'none'),
            desc=desc,
            script=script,
            status=self.STATUS[n],
        )
        rows.append(row)
        if not has_output:
            return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值