python之unittest單元測試

現有一個自行封裝的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格式測試報告啦,能夠在瀏覽器裏預覽噢~

是否是仍是挺好看滴~

相關文章
相關標籤/搜索