咱們都知道在自動化測試中都會用到先後置,pytest 相比 unittest 不管是先後置仍是插件等都靈活了許多,還能本身用 fixture 來定義。(甩 unttest 半條街?)html
首先了解一下,用例運行先後置級別以下:python
一、模塊級別:setup_module、teardown_moduleapi
全局的,整個模塊開只運行一次,優先於測試用例。session
二、類級別:setup_class、teardown_class框架
類級別:定義在類裏面,只針對此類生效。相似unittest的cls裝飾器函數
三、函數級:setup_function、teardown_function測試
函數級:只對函數生效,類下面的函數不生效。spa
四、方法級:setup_method、teardown_method插件
方法級:定義在類裏面的函數,也叫方法,每一個用例都執行一次3d
最後所有執行打印,代碼:
def setup_module(): print('\n整個模塊 前 只運行一次') def teardown_module(): print('\n整個模塊 後 只運行一次') def setup_function(): print('\n不在類中的函數,每一個用例 前 只運行一次') def teardown_function(): print('\n不在類中的函數,每一個用例 後 只運行一次') def test_ab(): b = 2 assert b < 3 def test_aba(): b = 2 assert b < 3 class Test_api(): def setup_class(self): print('\n此類用例 前 只執行一次') def teardown_class(self): print('\n此類用例 後 只執行一次') def setup_method(self): print('\n此類每一個用例 前 只執行一次') def teardown_method(self): print('\n此類每一個用例 後 執行一次') def test_aa(self): a = 1 print('\n我是用例:a') # pytest -s 顯示打印內容 assert a > 0 def test_b(self): b = 2 assert b < 3
一、Fixture 其實就是自定義 pytest 執行用例前置和後置操做,首先建立 conftest.py 文件 (規定此命名)
二、導入 pytest 模塊,運用 pytest.fixture 裝飾器,默認級別爲:函數級,如圖二源碼
三、其它用例文件調用便可,以下定義一個函數,繼承 conftest.py 文件裏的 setup_login 函數便可調用:
''' 運用 fixtures 定義的順序 ''' def test_001(setup_login): print('\n上面是登陸,我如今點擊進入home')
四、cmd 運行結果以下:
先執行了 conftest.py 文件裏的 setup_login 函數,再執行運行的用例.py文件;
G:\python_study\study\pytest_demo\study>pytest -s test_fixture.py ================================================= test session starts ================================================= platform win32 -- Python 3.6.5, pytest-3.6.3, py-1.8.0, pluggy-0.6.0 rootdir: G:\python_study\study\pytest_demo\study, inifile: collected 1 item test_fixture.py 先執行登陸 上面是登陸,我如今點擊進入home . ============================================== 1 passed in 0.07 seconds ===============================================
五、conftest.py 文件,自定義函數後置操做:yield
G:\python_study\study\pytest_demo\study>pytest -s test_fixture.py ================================================= test session starts ================================================= platform win32 -- Python 3.6.5, pytest-3.6.3, py-1.8.0, pluggy-0.6.0 rootdir: G:\python_study\study\pytest_demo\study, inifile: collected 1 item test_fixture.py 先執行登陸 上面是登陸,我如今點擊進入home . 測試數據最後執行清理 ============================================== 1 passed in 0.06 seconds ===============================================
六、多個自定義函數和全局級別展現:(全局的好比用於登陸獲取到token其餘用例模塊就不須要再登陸了)
①conftest.py 文件代碼以下:
import pytest @pytest.fixture(scope='session') # scope='session' 任何文件共享 def setu_login(): print('\n用例先登陸') @pytest.fixture() def open_html(): print('\n打開頁面') # 後置操做 yield print('\n測試數據最後執行清理')
②用例文件代碼以下:
def test_001(setu_login): print('\n上面是登陸,我如今點擊進入home') def test_002(open_html): print('\n沒登陸,打開html') def test_003(setu_login, open_html): print('\n登陸後,打開html') def test_data(open_html): print('測試數據1') def test_data1(open_html): print('測試數據122')
③cmd 運行結果:
G:\python_study\study\pytest_demo\study>pytest -s test_fixture.py ================================================= test session starts ================================================= platform win32 -- Python 3.6.5, pytest-3.6.3, py-1.8.0, pluggy-0.6.0 rootdir: G:\python_study\study\pytest_demo\study, inifile: collected 5 items test_fixture.py 用例先登陸 上面是登陸,我如今點擊進入home . 打開頁面 沒登陸,打開html . 測試數據最後執行清理 打開頁面 登陸後,打開html . 測試數據最後執行清理 打開頁面 測試數據1 . 測試數據最後執行清理 打開頁面 測試數據122 . 測試數據最後執行清理 ============================================== 5 passed in 0.06 seconds ===============================================
看完以後,有沒有甩 unittest 框架半條街你說了算?pytest 成爲了目前主流的任意玩框架。
對於運行用例級別都是setup_xx,teartown_xx,後面接module、class是否是很好記呢?歡迎來QQ交流羣:482713805