- 論壇徽章:
- 6
|
自己目前在python3.2下使用過HTMLTestRunner,發(fā)現(xiàn)下到的.py是2的語法,不兼容3.X 自己就改了一下,把改動的地方發(fā)出來,請大神多指教;
首先在官網(wǎng)下HTMLTestRunner.py 文件,并加入到Lib這個就不多說了;
修改一:
在python shell里輸入
>>>import HTMLTestRunner
>>> dir(HTMLTestRunner)
發(fā)現(xiàn)不認(rèn)識StringIO (No module named StringIO),確實3里面沒有這個了,第94行引入的名稱要改,改成import io,539行要改成self.outputBuffer = io.BytesIO()
修改二:
運行程序的時候有報錯,AttributeError: 'dict' object has no attribute 'has_key'
發(fā)現(xiàn)has_key的又被K掉了,所有到642行去做修改,if not rmap.has_key(cls): 需要換成 if not cls in rmap: (修改的時候換行、空格等不要改掉原有的格式)
修改三:
運行,繼續(xù)有報錯:'str' object has no attribute 'decode'
唉,好像是3里面對字符的操作,decode已經(jīng)拿掉了。定位一下,報在了772行,ue = e.decode('latin-1'),那么不需要decode操作了吧,直接改成 ue = e ,另外766還有類似的uo = o.decode('latin-1'),可不動先留著;
修改四:
繼續(xù)運行,發(fā)現(xiàn)還是在糾結(jié)數(shù)據(jù)類型的錯:
output = saxutils.escape(uo+ue),
TypeError: can't concat bytes to str
bytes和str不能直接連起來,那么778行的內(nèi)容escape(uo+ue) 有一個處理的“笨辦法”:都改成str,可修改該處內(nèi)容為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當(dāng)中,打開本地文件需用 fp = open(filename,'wb'),不要再去用file了;關(guān)閉該文件可用fp.close()
好啦,再試試你的程序吧
|
|