转载 python 3 下使用过HTMLTestRunner遇到问题 + 补充

导读:本篇文章讲解 转载 python 3 下使用过HTMLTestRunner遇到问题 + 补充,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

python3.X下使用过HTMLTestRunner,发现下到的.py是2的语法,不兼容3.X 转载  python 3 下使用过HTMLTestRunner遇到问题 + 补充 自己就改了一下,把改动的地方发出来,请大神多指教;

首先在官网下HTMLTestRunner.py 文件,并加入到Lib这个就不多说了;
修改一:
在python shell里输入
>>>import HTMLTestRunner
>>> dir(HTMLTestRunner)
发现不认识StringIO (No module named StringIO),确实3里面没有这个了,第94行引入的名称要改,改成import io,539行要改成self.outputBuffer = io.BytesIO()

修改二:
运行程序的时候有报错,AttributeError: ‘dict’ object has no attribute ‘has_key’
发现has_key的又被K掉了,所有到642行去做修改,if not rmap.has_key(cls): 需要换成 if not cls in rmap: (修改的时候换行、空格等不要改掉原有的格式)

修改三:
运行,继续有报错:’str’ object has no attribute ‘decode’
唉,好像是3里面对字符的操作,decode已经拿掉了。定位一下,报在了772行,ue = e.decode(‘latin-1’),那么不需要decode操作了吧,直接改成 ue = e ,另外766还有类似的uo = o.decode(‘latin-1’),可不动先留着;

修改四:
继续运行,发现还是在纠结数据类型的错:
output = saxutils.escape(uo+ue),
TypeError: can’t concat bytes to str

bytes和str不能直接连起来,那么778行的内容escape(uo+ue) 有一个处理的“笨办法”:都改成str,可修改该处内容为escape(str(uo)+ue)

修改五:(此处是最后一处改动了)
程序已然运行大半,但是最后还是有error:
print >>sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime)
TypeError: unsupported operand type(s) for >>: ‘builtin_function_or_method’ and ‘RPCProxy’

相信这条很多刚接触3.x的人都明白, 2和3的print是很不同的,那么在3中,print 后面是不会跟>> 这样的,所以到631行,把print的语句修改掉,原来是print >>sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime), 可改成 print (sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime))

每次修改后都要对HTMLTestRunner.py 保存一下。

另外在3当中,打开本地文件需用   fp = open(filename,’wb’),不要再去用file了;关闭该文件可用fp.close()

 

补充:

修复6:

 File "c:\users\lani.wang\appdata\local\programs\python\python37\lib\HTMLTestRunner.py", line 118, in write
    self.fp.write(s)
TypeError: a bytes-like object is required, not 'str'

由于我在测试中输出用: print(‘First case’)导致类型写入出错。

将HTMLTestRunner.py”, line 118, in write self.fp.write(s)

s串转换成byte:  修改:

write self.fp.write(str.encode(s))

测试代码
 

import unittest
import HTMLTestRunner


class DemoTest(unittest.TestCase):
    def test_one(self):
        print('First case')

    def test_two(self):
        print('Second case')

if __name__=='__main__':
    print('Start main--> TEST')
    suite = unittest.TestSuite()
    suite.addTest(DemoTest("test_one"))
    suite.addTest(DemoTest('test_two'))
    filename = "D:\\AWS\\GoertekBT Project\\Louki API\\HeartBeatServer\\tests\\test_result.html"
    fp = open(filename,'wb+')
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'TEST RESUlT',description=u'TEST CASE')
    runner.run(suite)
    fp.close()

最终测试通过,html结果:

转载  python 3 下使用过HTMLTestRunner遇到问题 + 补充

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101688.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!