python3.X下使用过HTMLTestRunner,发现下到的.py是2的语法,不兼容3.X 自己就改了一下,把改动的地方发出来,请大神多指教;
首先在官网下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结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101688.html