現有一個自行封裝的http_requests模塊,用於測試http請求,內容以下:html
import requests class HttpRequests: def __init__(self,url,para): self.url = url self.para = para def http_requests(self,method): try: if method.lower() == 'get': response = requests.get(self.url,params=self.para) return response elif method.lower() == 'post': response = requests.post(self.url,data=self.para) return response elif method.lower() == 'delete': response = requests.delete(self.url,data=self.para) return response except Exception as e: print('請求錯誤:',e)
怎樣利用python的unittest單元測試對其進行場景覆蓋測試呢?python
首先明確一下unittest單元測試步驟:git
引入unittest模塊,unittest模塊包括了TestCase--測試用例、TestSuite--測試套、TestLoader--加載器、TextTestRunner--執行測試用例、TextTestResult--測試結果等github
--> 建立一個測試類,繼承unittest.TestCase類,用於寫測試用例瀏覽器
--> 在測試類裏定義測試方法,以 test 開頭。每一條用例對應一個方法框架
--> 建立測試套,用於存儲測試用例post
--> 向測試套裏添加測試用例單元測試
--> 執行測試用例並生成測試報告測試
下面一步一步來:ui
1.引入unittest模塊,新建test_reuqests.py文件,一句搞定 import unittest
2.建立測試類,定義測試方法
測試方法就是測試用例,包括預期結果、實際結果,以及預期結果和實際結果的比對結果判斷用例是否執行經過
斷言:預期結果和實際結果比較,並判斷實際結果是否符合預期的過程就是斷言
常見的斷言方法有:
這裏用assertIn的方法,判斷預期的字符串是否包含於實際的響應報文中
import unittest
# 引入http_requests模塊的httprequests方法 from .http_requests import HttpRequests # 建立測試類 class TestRequests(unittest.TestCase): # 建立測試用例,以test開頭 def test_001(self): '''get方法,用戶名/密碼正確''' res = HttpRequests('http:/xx.xx.xx.xx:xx/xxx/login', {'mobilephone':'186********','pwd':'123456'}).http_requests('get') self.assertIn('登陸成功',res.text) def test_002(self): '''get方法,密碼爲空''' res = HttpRequests('http://xx.xx.xx.xx:xx/xxx/login', {'mobilephone':'186********','pwd':''}).http_requests('post') self.assertIn('密碼不能爲空',res.text)
如上代碼建立了測試類TestRequests,並新建了兩條測試用例,分別測試用戶名密碼正確 和 密碼爲空的狀況,還能夠新建更多場景的測試用例,和功能測試用例功能點是同樣的。
3.建立測試套,並向測試套中添加測試用例
import unittest from .test_requests import * # 建立測試用例容器suite suite = unittest.TestSuite()
向測試套中添加測試用例有三種方法:
a.直接用addTest加載測試用例
# 增長每一條用例:測試類類名(測試方法名) suite.addTest(TestRequests('test_001')) suite.addTest(TestRequests('test_002'))
這種方法須要一條一條用例添加,有幾條就須要添加幾回。
b.經過TestLoader加載測試用例
loader = unittest.TestLoader()
b方法裏面又分兩種方法:
b1.經過測試類加載測試用例
# 經過測試類加載測試用例 loadTestsFromTestCase suite.addTest(loader.loadTestsFromTestCase(TestRequests))
這種方法添加某個測試類,會將該測試類裏面的測試方法都添加進來,有幾個測試類就須要添加幾回。
b2.經過測試類所在模塊加載測試用例
# 經過測試類所在模塊加載測試用例 loadTestsFromModule # 須要引入測試類模塊 from .xx import test_requests suite.addTest(loader.loadTestsFromModule(test_requests))
這種方法最簡便,添加測試模塊,會把該測試模塊裏的全部測試類測試方法都添加進來。所以是最經常使用的。
4.執行測試用例,並生成測試報告
有兩種方法:
a.python裏unittest單元測試框架提供了生成txt格式的測試報告方法,能夠保存到txt文件裏
with open('Test_http_requests.txt','w',encoding='utf-8') as file: runner = unittest.TextTestRunner(stream=file,verbosity=2) #verbosity表示報告詳細狀況,0-2,2最詳細 runner.run(suite)
這種方法比較簡單,只是生成txt格式的報告不是很美觀,可讀性也不是很強
b.這裏咱們從github上下載一個HTMLTestRunner模塊,從新命名爲HTMLTestRunnerNew,並存放在python的lib目錄下。
import HTMLTestRunnerNew with open('Test_http_requests.html','wb+') as file: runner = HTMLTestRunnerNew.HTMLTestRunner(file,title='http_request測試報告',description='我是描述',tester='南山之喃') runner.run(suite)
把上面步驟3和4整合一下,加載用例採用最經常使用的經過測試模塊加載用例的方法,完整代碼以下:
import unittest from .test_requests import * # 建立測試用例容器suite suite = unittest.TestSuite() # addTest加載測試用例 # 經過測試類所在模塊加載測試用例 loadTestsFromModule -- 最經常使用 # 須要引入測試類模塊 from .xx import test_requests suite.addTest(loader.loadTestsFromModule(test_requests)) # 執行測試用例並生成測試報告 import HTMLTestRunnerNew with open('Test_http_requests.html','wb+') as file: runner = HTMLTestRunnerNew.HTMLTestRunner(file,title='http_request測試報告',description='我是描述',tester='南山之喃') runner.run(suite)
執行以下代碼,就會生成名爲 http_request測試報告 的html格式測試報告啦,能夠在瀏覽器裏預覽噢~
是否是仍是挺好看滴~