unittest
1、什麽是Unittest框架?
python自帶壹種單元測試框架
2、為什麽使用UnitTest框架?
>批量執行用例
>提供豐富的斷言知識
>可以生成報告
3、核心要素:
1). TestCase(測試用例)
2). TestSuite(測試套件)
3). TestRunner(測試執行,執行TestUite測試套件的)
4). TestLoader(批量執行測試用例-搜索指定文件夾內指定字母開頭的模塊) 推薦
5). Fixture(固定裝置(兩個固定的函數,壹個初始化時使用,壹個結束時使用))
接下來會展開 核心要素來認識unittest框架:
首先介紹下unittest的用例規則:
1、測試文件必須導包:import unittest
2、測試類必須繼承 unittest.TestCase
3、測試方法必須以 test_開頭
壹、TestCase(測試用例)
1、是壹個代碼文件,在代碼文件中來書寫真正的用例代碼 (裏面的print均是模擬測試用例)
說明:def 定義的test_ 是測試用例,只有執行 if __name__ == '___mian___' 的時候會執行測試用例,其他普通函數則不執行,通過 self 來調用執行。
二、TestSuite(測試套件)和TestRunner(測試執行)
1、TestSuite(測試套件):用來組裝,打包 ,管理多個TestCase(測試用例)文件的
2、TestRunner(測試執行):用來執行 TestSuite(測試套件的)
代碼:首先要準備多個測試用例的文件才可以實現TestSuite和TestRunner,以下代碼是已經準備了unittest_Demo2和unittest_Demo1兩個測試用例文件
三、TestLoader(測試加載)
說明:
2. 搜索指定目錄文件下指定字母開頭的模塊文件下test開始的方法,並將這些方法添加到測試套件中,最後返回測試套件
3. 與Testsuite功能壹樣,對他功能的補充,用來組裝測試用例
壹般測試用例是寫在Case這個文件夾裏面,當測試用例超多的時候就可以考慮 TestLoader
四、Fixture(測試夾具)
是壹種代碼結構,在某些特定情況下,會自動執行。
4.1 方法級別
在每個測試方法(用例代碼)執行前後都會自動調用的結構
def setUp(),每個測試方法執行之前都會執行 (初始化)
def tearDown(),每個測試方法執行之後都會執行 (釋放)
特性:幾個測試函數,執行幾次。每個測試函數執行之前都會執行 setUp,執行之後都會執行tearDwon
4.2 類級別
在每個測試類中所有方法執行前後 都會自動調用的結構(在整個類中 執行之前執行之後各壹次)
def setUpClass() ,類中所有方法之前
def tearDownClass(),類中所有方法之後
特性:測試類運行之前運行壹次setUpClass ,類運行之後運行壹次tearDownClass
註意:類方法必須使用 @classmethod修飾
案列模板:結合了類級別和方法級別實現的
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GBxQV2uP-1647245316010)(C:/Users/15277/AppData/Roaming/Typora/typora-user-images/image-20220303153824329.png)]
五、斷言
1、什麽是斷言:
讓程序代替人工自動的判斷預期結果和實際結果是否相符
斷言的結果:
1)、True,用例通過
2)、False,代碼拋出異常,用例不通過
3)、在unittest中使用斷言,需要通過 self.斷言方法
2、為什麽要斷言:
自動化腳本執行時都是無人值守,需要通過斷言來判斷自動化腳本的執行是否通過
註:自動化腳本不寫斷言,相當於沒有執行測試壹個效果。
3、常用的斷言:
對於壹些未完成的或者不滿足測試條件的測試函數和測試類, 不想執行,可以使用跳過
結果
七、數據驅動(unittest ddt)
ddt:data-driver tests
數據驅動:是以數據來驅動整個測試用例的執行, 也就是測試數據決定測試結果
數據驅動解決的問題是:
1)、代碼和數據分離,避免代碼冗余
2)、不寫重復的代碼邏輯;
在python解釋器中需要安裝 ddt 這個包才能用:
要檢查是否安裝上,在cmd當中 輸入 pip list命名,有ddt說明安裝成功
語法:
1、使用數據驅動,要在class前加上修飾器 @ddt
說明:方法裏面使用 print ,為了方便,模擬測試用例,主要是為了學習數據驅動,實際中方法裏面寫的是測試用例的代碼
1)、結合 selenium 使用 ddt
self:相當於java中的this,當前對象的引用,self.driver定義了driver這個變量。
2、在實際中不可能是單壹參數進行傳參,將會使用多個參數進行傳參:
但是以上步驟都是數據在代碼當中的,假如要測試n個手機號這樣的數據,全部寫在 @data 裝飾器裏面就很麻煩,這就引出了數據驅動裏面的代碼和數據的分離。
3、將數據放入壹個文本文件中,從文件讀取數據, 如JSON、 excel、 xml、 txt等格式文件 ,這裏演示的是json文件類型.
json文件處理, 這個鏈接介紹了json文件和Python文件基本操作
(1)、在json文件驅動
(2)、在測試代碼中讀取json文件
執行結果:
壹行表示壹組:
寫法壹:
寫法二:推薦
對應的json文件
寫法:
註意:file_date 裝飾器,可以直接讀取yaml和json文件
建立excel表的時候需要退出pychram在根目錄下創建excel表保存,否則會報錯
用excel登錄csdn操作
用例不可能每壹次運行都成功,肯定運行時候有不成功的時候。如果可以捕捉到錯誤,並且把錯誤截圖保存,這將
是壹個非常棒的功能,也會給我們錯誤定位帶來方便
截圖方法: driver.get_screenshot_as_file
有兩種測試報告:
只有單獨運行 TestCase 的代碼,才會生成測試報告
這裏需要第三方的測試運行類模塊,然後放在代碼的目錄中
就像這兩個模塊壹樣放進代碼目錄中
寫法壹:
寫法二:
這裏面的當前路徑也可以用 ./ 來表示!!!
註意:
實例化 第三方的運行對象,HTMLTestRunner()的初始化有多種可以自定義設置
最後生成結果
unittest框架就本上就是這些知識了,裏面記得東西很多,多敲代碼,形成記憶...