1. 程式人生 > >Python+unittest+HTMLTestRunner進行接口自動化,以html格式展示結果報告

Python+unittest+HTMLTestRunner進行接口自動化,以html格式展示結果報告

default log python2 需要 pro opera rom man method

HTMLTestRunner下載地址: http://tungwaiyip.info/software/HTMLTestRunner.html.

HTMLTestRunner.py放置當前的項目文件夾下。

下載的HTMLTestRunner.py是針對python2寫的,所以針對python3需要適當更改其內容:

1.

  問題一:No module named StringIO

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

  解決方法:

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

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

  2.

  問題二: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:

  3.

  問題三:

‘str‘ object has no attribute ‘decode‘

  原因:python3 裏面對字符的操作中,decode已經拿掉了。

  解決方法:

    定位到772行,把 ue = e.decode(‘latin-1‘) 直接改成 ue = e 。

    另外766還有類似的uo = o.decode(‘latin-1‘),改成 uo=o ;

  4.

  問題四 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‘)。

  5.

  問題五: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)

  6.問題六: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‘)) 即可。

  7.問題七:打開生成的html格式的測試報告時中文顯示亂碼

   解決方法:   

    定位第686行

    self.stream.write(output.encode(‘UTF-16‘))改為:self.stream.write(output)

    同時,運行測試用例的runner代碼這樣寫:

      技術分享圖片

    

    或者防止亂碼還可以這樣做:

   686行self.stream.write(output.encode(‘UTF-16‘))改為:self.stream.write(output.encode(‘UTF-8‘))

    打開HTML文件時 with open(filename,’wb’) as fb:

某大神總結的jmeter深入使用教程: http://www.cnblogs.com/blongfree/tag/JMeter/default.html?page=3

  

Python+unittest+HTMLTestRunner進行接口自動化,以html格式展示結果報告