1、fixture的定義方法
fixture:即我們通常所說的前置操作。
格式:
def fixture(scope="function", params=None, autouse=False, ids=None, name=None):
定義fixture:在函數聲明之前加上“@pytest.fixture(scope='')"
(1)scope:scope=''
funtion:目前函數調用
class:目前類調用
module:全部py子產品調用
session:目前包下的py用例都調用
(2)params:預設為None(講解在另一篇部落格)
當不為None時,params裡面的每個值,fixture都會調用一次
(3)name設定為别名(講解在另一篇部落格)
3、conftest的使用
一般将fixture寫入到coonftest.py配置檔案
conftest.py配置需要注意以下幾點:
☆ conftest.py配置腳本名稱是固定的,不能改名稱;
☆ conftest.py與運作的用例要在同一個目錄下,并且有__init__.py檔案;
☆ 不需要import導入 conftest.py,用例會自動查找。
4、檔案結構
fixture的單獨使用、fixture與fixture的互相調用
fixture的單獨使用、fixture與fixture的互相調用 5、fixture單個調用
# conftest.py
@pytest.fixture()
def user():
user='aaa'
return user
# test_a.py
def test_a(user):
print(user)
結果:
test_a.py .aaa
6、fixture多個調用
# conftest.py
@pytest.fixture()
def user():
user='aaa'
return user
@pytest.fixture()
def user2():
user2='bbb'
return user2
# test_a.py
def test_a(user,user2):
print(user,user2)
結果:
test_a.py .aaa bbb
7、fixture中調用fixture
# conftest.py
@pytest.fixture()
def user():
user='aaa'
return user
#在psw2中調用另一個fixture:user,當參數傳入即可。
@pytest.fixture()
def psw2(user):
usr=user
psw=123
return user,psw
# test_a.py
def test_c(psw2):
print(psw2)
結果:('aaa', 123)
8、在fixture下的函數下同時傳參:
# # 在fixture中多參數的傳遞(通過被調用函數傳參)
# funtion_a.py
def funtion_a(test_input1,test_input2):
test_input1=test_input1
test_input2=test_input2
# print(test_input1,test_input2)
return test_input1,test_input2
if __name__=='__main__':
funtion_a('aaa','bbb')
# conftest.py
from funtion_a import *
@pytest.fixture()
def psw(user):
usr=user
funtion_a('in','out')
#傳回一個list
return [usr,funtion_a('in','out')]
# test_a.py
def test_login(psw):
# 相應的指派一個list,數量對應2個
[usr,(inout)]=psw
print('結果為:%s'% [usr,(inout)])
結果:
結果為:['aaa', ('in', 'out')]
9、parametsize與fixture同時使用
# conftest.py
# paramesize與fixture的結合使用
@pytest.fixture(scope="function")
def test_setup():
a='前置操作傳回值'
return a
# test_a.py
import pytest
test_data=['a','b','c']
@pytest.mark.parametrize('test_in',test_data)
def test_input_test(test_setup,test_in):
print(test_setup)
test_input=test_in
print(test_input)
test_input.py
.前置操作傳回值
a
.前置操作傳回值
b
.前置操作傳回值
c
[100%]
========================== 3 passed in 0.05 seconds ===========================
10、在fixture中存儲testcase的傳回值
# conftest.py
@pytest.fixture(scope="function")
def add(request):
yield
print('開始存資料')
print('存的資料為 %s' % request.config.s)
#test_a.py
# 驗證在fixture後存用例的傳回值
def test_sava(add,request):
request.config.s='aaa'
結果:
test_a.py .開始存資料
存的資料為 aaa