前言
學習知識要善於舉例,舉例,再舉例。—— 藍寅
好啦,雞湯結束,開始分享!!
一、scope參數是什么?
- scope參數是fixture方法中的其中一個參數;
- scope參數用來設置fixture的應用范圍,設置后,會根據設置的范圍去觸發執行;
- scope參數有4個可選值:function(默認)、class、module、package/session
function:每個方法(函數)都會執行一次;
class:每個類都會執行一次。類中有多個方法調用,只在第一個方法調用時執行;
module:一個 .py 文件執行一次。一個.py 文件可能包含多個類和方法;
package/session:多個文件調用一次,可以跨 .py 文件。注意使用時單獨寫package或session
二、scope參數出處(會的忽略該步)
- 2.1 編寫如下圖代碼,並按照操作:
- 2.2 跳轉到fixture方法的位置時,就可以看到scope參數了,它有默認值function,英文好的朋友可以繼續看下面的注釋
三、scope參數簡單使用
- 3.1 scope="function" 舉例
import pytest
@pytest.fixture(scope='function') # function級別每個函數都會執行一次
def setUp():
print('\nsetUp')
yield
print('\ntearDown')
def testcase01(setUp):
print('exectue testcase01')
assert 1
def testcase02(setUp):
print('exectue testcase02')
assert 1
if __name__=='__main__':
pytest.main(["-s"])
以上代碼執行結果:
/usr/local/bin/python3.8 /Users/lanyin/PycharmProjects/newdream/pytest_demo/test_demo_03.py
============================= test session starts ==============================
platform darwin -- Python 3.8.2, pytest-5.4.0, py-1.8.1, pluggy-0.13.1
rootdir: /Users/liuqingjun/PycharmProjects/newdream/pytest_demo
plugins: ordering-0.6, html-2.1.0, allure-pytest-2.8.11, metadata-1.8.0
collected 2 items
test_demo_03.py
setUp
exectue testcase01
.
tearDown
setUp
exectue testcase02
.
tearDown
============================== 2 passed in 0.02s ===============================
- 3.2 scope="module" 舉例
import pytest
@pytest.fixture(scope='module') # module級別每個模塊都會執行一次
def setUp():
print('\nsetUp')
yield
print('\ntearDown')
def testcase01(setUp):
print('exectue testcase01')
assert 1
def testcase02(setUp):
print('exectue testcase02')
assert 1
if __name__=='__main__':
pytest.main(["-s"])
以上代碼執行結果:
/usr/local/bin/python3.8 /Users/lanyin/PycharmProjects/newdream/pytest_demo/test_demo_03.py
============================= test session starts ==============================
platform darwin -- Python 3.8.2, pytest-5.4.0, py-1.8.1, pluggy-0.13.1
rootdir: /Users/liuqingjun/PycharmProjects/newdream/pytest_demo
plugins: ordering-0.6, html-2.1.0, allure-pytest-2.8.11, metadata-1.8.0
collected 2 items
test_demo_03.py
setUp
exectue testcase01
.exectue testcase02
.
tearDown
============================== 2 passed in 0.02s ===============================
上述兩個實例小結:
- scope="function" 在每個函數開始執行測試方法之前執行一次,每個測試方法部執行完之后再執行一次 (共2次輸出setUp、tearDown)
- scope="module" 只會在模塊開始執行測試方法之前執行一次,測試方法全部執行完之后執行一次(共1次輸出setUp、tearDown)
- "class"和"package/session"與上述用法原理一樣,不再重復舉例,傷大家眼睛