Python+unittest+requests+HTMLTestRunner接口自動(dòng)化測試框架

簡介:

在接口測試工作中為大家所熟知的工具有很多,如postman、soupUI、jmeter、RF框架......,其大多使用簡單且功能強(qiáng)大,但為何還要進(jìn)行接口測試框架的開發(fā)呢?原因如下:

1、測試數(shù)據(jù)不可控,無法進(jìn)行數(shù)據(jù)的初始化操作或操作較復(fù)雜

2、對于加密接口限制較多

3、擴(kuò)展能力不足,測試報(bào)告的多樣性收集及持續(xù)集成能力較弱

接口自動(dòng)化測試框架搭建:

1).unittest 是來解決用例的組織與執(zhí)行

2).HTMLTestRunner 基于unittest單元測試框的擴(kuò)展,生成HTML測試報(bào)告,可以自己定制

3).requests 發(fā)送HTTP接口的庫,主要是對post,get,PUT, DELETE, HEAD等請求的模擬

步驟一:安裝Python

Python下載地址:https://www.python.org/downloads/

可自行選擇python 3.x的版本進(jìn)行安裝,當(dāng)前選擇的版本為python3.6

步驟二:安裝requests擴(kuò)展庫

可下載安裝:https://www.pypi.python.org/pypi/requests/

也可在線安裝(cmd 命令行執(zhí)行):pip install requests

步驟三: 安裝xlrd庫 和 xlwt庫?

在線安裝:pip install xlrd/xlwt

步驟四:安裝HTMLTestRunner擴(kuò)展

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

將下載的HTMLTestRunner.py文件放在python安裝目錄的...\Lib目錄下

以下是HTMLTestRunner.py針對Python 3.x版本需要修改的地方(轉(zhuǎn)自:博客園-微微笑):

問題一:No module named StringIO

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

解決方法:

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

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

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

原因:python 3 字典類型的object 已經(jīng)不支持 has_key函數(shù),我們需要使用in 來進(jìn)行遍歷。

解決方法:

定位到642行,if not rmap.has_key(cls): 需要換成 if not cls in rmap:

問題三:'str' object has no attribute 'decode'

原因:python3 里面對字符的操作中,decode已經(jīng)拿掉了。

解決方法:

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

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

問題四 :TypeError: can't concat bytes to str

原因:定位一下,報(bào)在了778行的內(nèi)容escape(uo+ue) 。這是因?yàn)槲覀兩厦娼ouo賦值的時(shí)候,走的是else流程,uo被賦值的是bytes類型的值。 而bytes類型不能直接轉(zhuǎn)化為str類型。所以我們需要在前面給uo賦值的時(shí)候先將bytes類型轉(zhuǎn)換為 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轉(zhuǎn)化為bytes類型。

解決方法:

定位到118行,把?self.fp.write(s) 修改為?self.fp.write(bytes(s,'UTF-8')) 即可。

**********書山有路,學(xué)海無涯,無數(shù)個(gè)孤獨(dú)的夜晚,需要一點(diǎn)小小的成就感!**********

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容