五一小長假已經結束了,想必你們都吃飽喝足玩好了,那就繼續學習吧。一天不學習,本身知道;兩天不學習,對手知道;三天不學習,你們知道;一週不學習,智商輸給豬。好了開個玩笑都逗你們一樂,可是想一想仍是有道理的。那就進html
入正題:上一篇咱們批量執行完用例後,已經生成的測試報告是生成 HTML 格式的。可是咱們能夠看出那個官方的測試報告既不美觀也不大方,咱們這裏須要優化一下,優化的讓人賞心悅目,就和看到一個美女同樣看了一眼,忍不住回頭再多前端
看一眼 - _ - 而且把上一篇遇到的問題列舉解決一下。python
因爲 HTMLTestRunner.py 本來就是python2版本,目前還沒找到python3版本,因此須要咱們本身修改 HTMLTestRunner.py 文件。函數
問題一:No module named StringIO學習
緣由:python 3 中 沒有 StringIO 這個模塊。這裏咱們須要使用io 這個模塊來代替。測試
解決方法:優化
第94行引入的名稱要改,從 import StringIO 改爲import io。ui
相應的,539行 self.outputBuffer = StringIO.StringIO() 要改爲self.outputBuffer = io.BytesIO()編碼
問題二:AttributeError: 'dict' object has no attribute 'has_key'spa
緣由:python 3 字典類型的object 已經不支持 has_key函數,咱們須要使用in 來進行遍歷。
解決方法:
定位到642行,if not rmap.has_key(cls): 須要換成 if not cls in rmap:
問題三:'str' object has no attribute 'decode'
緣由:python3 裏面對字符的操做中,decode已經拿掉了。
解決方法:
定位到772行,把 ue = e.decode('latin-1') 直接改爲 ue = e 。
另外766還有相似的uo = o.decode('latin-1'),改爲 uo=o ;
問題四 :TypeError: can't concat bytes to str
緣由:定位一下,報在了778行的內容escape(uo+ue) 。這是由於咱們上面給uo賦值的時候,走的是else流程,uo被賦值的是bytes類型的值。 而bytes類型不能直接轉化爲str類型。因此咱們須要在前面給uo賦值的時候先將bytes類型轉換爲 str類型。
解決方法:
修改768行的 uo = o ,直接改爲 uo = o.decode('utf-8') 。
另外 774還有相似的 ue = e, 改爲 ue = e.decode('utf-8')。
問題五:TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and 'RPCProxy'
緣由: python3 不支持 print >> sys.stderr 這種寫法,這裏定義輸出流的話,採用print("This is print str",file=sys.stderr) 這種方式。
解決方法:
定位到631行,把print的語句修改掉,原來是print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime), 可改爲 print('\nTime Elapsed: %s' % (self.stopTime-self.startTime),file=sys.stderr)
問題六:TypeError: 'str' does not support the buffer interface
緣由:定位一下,問題出在118行,這裏s是str類型,咱們須要把傳過來的s轉化爲bytes類型。
解決方法:
定位到118行,把 self.fp.write(s) 修改成 self.fp.write(bytes(s,'UTF-8')) 便可。
修改後對HTMLTestRunner.py 保存一下。
python3 裏面打開文件使用 open,不要再去用file了。
即 fp = file(filename,'wb')替換成 fp = open(filename,'wb');
關閉該文件可用fp.close()
備註: 改動以後,中文也不會亂碼。
一、測試報告中,msg 自定義異常內容有中文狀況會出現亂碼,如圖所示:
二、找到 HTMLTestRunner.py 文件,搜索:uo =
三、找到紅色區域設置編碼的兩個地方
四、註釋掉紅色區域這兩個設置,從新添加編碼格式爲:uo = o.decode('utf-8') ue = e.decode('utf-8'),或者在此基礎上直接修給成uo = o.decode('utf-8') ue = e.decode('utf-8'),建議初學者仍是用第一種方法。這樣出錯了,能夠很快還原,不然
在碰到更復雜的代碼直接修改就可能會遇到問題
五、修改好以後記得保存,從新運行,亂碼問題就解決了
一、各位小夥伴能夠按照我前邊的方法進行本身修改,或者找我要也是能夠,注意在修改的時候空格和Tab的問題,不然運行會報這樣的錯誤
一、優化是一些前端和CSS知識,在這裏就不作詳細介紹了,有興趣的能夠找我探討一下,也能夠和我要一下那個優化後的報告文件,優化後報告展現:
一、關於生成報告,優化報告就是這麼簡單,小夥伴們練起來吧!
二、爲了新的報告不會覆蓋掉老的測試報告,能夠按圖中的紅色部分圈起來的方法實現
三、參考代碼(增長一行代碼,測試報告的路徑修改一下)
1 # 獲取當前時間,這樣便於下面的使用。 2 now = time.strftime("%Y-%m-%M-%H_%M_%S", time.localtime(time.time())) 3 #保存生成報告的路徑 4 report_path = "C:\\Users\\DELL\\PycharmProjects\\honggetest\\report\\result"+now+".html"
原文出處:https://www.cnblogs.com/du-hong/p/10794684.html