python接口自動化(二十八)--html測試 報告——下(詳解)


簡介

  五一小長假已經結束了,想必大家都吃飽喝足玩好了,那就繼續學習吧。一天不學習,自己知道;兩天不學習,對手知道;三天不學習,大家知道;一周不學習,智商輸給豬。好了開個玩笑都逗大家一樂,但是想想還是有道理的。那就進

入正題:上一篇我們批量執行完用例后,已經生成的測試報告是生成 HTML 格式的。但是我們可以看出那個官方的測試報告既不美觀也不大方,我們這里需要優化一下,優化的讓人賞心悅目,就和看到一個美女一樣看了一眼,忍不住回頭再多

看一眼  - _ - 並且把上一篇遇到的問題列舉解決一下。

python3如何改動下載的HTMLTestRunner

HTMLTestRunner.py 的python3 版本

由於 HTMLTestRunner.py 原本就是python2版本,目前還沒找到python3版本,所以需要我們自己修改 HTMLTestRunner.py 文件。

1. 修改的地方

問題一:No module named StringIO

原因:python 3 中 沒有 StringIO 這個模塊。這里我們需要使用io 這個模塊來代替。

解決方法:

第94行引入的名稱要改,從 import StringIO 改成import io。

相應的,539行 self.outputBuffer = StringIO.StringIO() 要改成self.outputBuffer = io.BytesIO()

問題二:AttributeError: 'dict' object has no attribute 'has_key'

原因: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')) 即可。

2. 保存

修改后對HTMLTestRunner.py 保存一下。

3. 調用語句更改

python3 里面打開文件使用 open,不要再去用file了。

即 fp = file(filename,'wb')替換成 fp = open(filename,'wb');

關閉該文件可用fp.close()

備注: 改動之后,中文也不會亂碼。

中文亂碼

1、測試報告中,msg 自定義異常內容有中文情況會出現亂碼,如圖所示:

 

2、找到 HTMLTestRunner.py 文件,搜索:uo =

3、找到紅色區域設置編碼的兩個地方

4、注釋掉紅色區域這兩個設置,重新添加編碼格式為:uo = o.decode('utf-8') ue = e.decode('utf-8'),或者在此基礎上直接修給成uo = o.decode('utf-8') ue = e.decode('utf-8'),建議初學者還是用第一種方法。這樣出錯了,可以很快還原,否則

在碰到更復雜的代碼直接修改就可能會遇到問題

5、修改好之后記得保存,重新運行,亂碼問題就解決了

 python3 報告問題

1、各位小伙伴可以按照我前邊的方法進行自己修改,或者找我要也是可以,注意在修改的時候空格和Tab的問題,否則運行會報這樣的錯誤

報告問題樣式優化

1、優化是一些前端和CSS知識,在這里就不做詳細介紹了,有興趣的可以找我探討一下,也可以和我要一下那個優化后的報告文件,優化后報告展示:

 

 小結

1、關於生成報告,優化報告就是這么簡單,小伙伴們練起來吧!

2、為了新的報告不會覆蓋掉老的測試報告,可以按圖中的紅色部分圈起來的方法實現

 3、參考代碼(增加一行代碼,測試報告的路徑修改一下)

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"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM