一、pytest 的優勢
pytest是基於 unittest 之上的單元測試框架,它的優勢如下:
- 自動發現測試模塊和測試方法
-
- 默認從當前目錄中搜集測試用例,即在那個目錄下運行pytest 命令,則從那個目錄當中搜索
- 搜索規則:進入目錄后,在按照搜索規則搜索用例
- 符合命名規則 test_*.py 或者 *_test.py 的文件
- 以 test_ 開頭的函數名
- 以 Test 開頭的測試類(沒有 _init_ 函數)當中,以 test_ 開頭的函數
- 默認從當前目錄中搜集測試用例,即在那個目錄下運行pytest 命令,則從那個目錄當中搜索
-
-
import pytest if __name__ == '__main__': pytest.main()
-
- 斷言使用 assert + 表達式
- 可以設置測試會話級(session)、模塊級(module)、類級(class)、函數級(function)的 fixture 來共享測試用例的前置和后置
- 有豐富的插件庫,目前已經700+ ,pytest插件地址:http://plugincompat.herokuapp.com/
二、與unittest的對比
1.用例設計規划
- unittest
- 測試類必須繼承 unittest.TestCase
- 測試函數必須以 “test_” 開頭
- 使用defaultTestLoader.descover()加載測試用例時,測試模塊( py文件)名稱要以test開頭
- pytest
- 測試模塊文件的文件名必須以"test_ "開頭或者以" _test"結尾
- 測試類命名必須以"Test"開頭
- 測試函數名必須以"test"開頭
- 測試類里面不能使用" _init_ "方法
2.斷言對比
- unittest斷言
- assertEqual(a, b) 判斷a和b是否相等
- assertNotEqual(a, b) 判斷a不等於b
- assertTrue(a) 判斷a是否為Ture
- assertFalse(a) 判斷a是否為False
- assertIn(a, b) a包含在b里面
- asserNotIn(a, b) a不包含在b里面
- pytest斷言
- assert + 表達式
3.用例前置和后置
- unittest前置和后置
- 通過setup每個用例執行前執行,teardown每個用例執行后執行
- 通過setupclass類里面所有用例執行前執行,teardownclass類里面所有用例執行后執行
- pytest前置和后置
- 會話級別: session,整個測試執行會話全部用例開始前執行/全部用例執行完后執行
- 模塊級別: module,只對模塊級別生效,整個.py全部用例開始前執行/全部用例執行完后執行
- 類級別: class,只對類級別生效,整個測試類全部用例開始前執行/全部用例執行完后執行
- 函數級別: function,只對函數級別生效,每個用例開始前和結束后執行一次
4.參數化
- unittest參數化
- 結合ddt模塊,在類上面使用@ddt裝飾,測試用例的方法上使用@data0來來實現數據驅動
- pytest參數化
- 通過裝飾器@pytest.mark.parametrize來實現數據驅動
5.生成報告方式
- unittest
- 通過HTMLTestRunner生成
- pytest
- 通過pytest-html生 成html格式報告
- 通過與allure集成生成優美的allure報告
*******尊重作者,本文是本人轉載自:https://www.cnblogs.com/xiaogongjin/ *******