免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
pytest---fixture簡單使用

  上一篇介紹了如何通過setup和teardown來幫助我們做自動(dòng)化的前置和后置內(nèi)容,那么如果有一個(gè)場景,有的用例需要用到登錄的方法,有的卻用不到登錄的方法,這時(shí)如果用setup和teardown的方法就不能寫在一個(gè)測試類中,但是pytest中還有更好的前置內(nèi)容,不需要每個(gè)用例都能用到。

fixture

fixture屬于pytest中的一個(gè)方法,fixture是在測試函數(shù)運(yùn)行前后進(jìn)行執(zhí)行的,fixture的命名不規(guī)范沒有強(qiáng)制要求,以及里面的代碼內(nèi)容可以自己進(jìn)行定制從而滿足多種測試需求,配置測試前的數(shù)據(jù)清理,以及測試完成后的數(shù)據(jù)管理。fixture中的代碼處理測試后的代碼為 yield 測試開始前會(huì)執(zhí)行yield前面的代碼(setup),測試完成后將執(zhí)行yield后面的代碼(teardown),在fixture中不是強(qiáng)制必須有yield,比如,我只有前置代碼,沒有后置代碼,那就不需要yield內(nèi)容?;蛘咧挥泻笾么a,沒有前置代碼。無論測試過程中發(fā)生什么錯(cuò)誤,yield后續(xù)的代碼都會(huì)被執(zhí)行

源碼:

def fixture(  # noqa: F811
    fixture_function: Optional[_FixtureFunction] = None,
    *,
    scope: "Union[_Scope, Callable[[str, Config], _Scope]]" = "function",
    params: Optional[Iterable[object]] = None,
    autouse: bool = False,
    ids: Optional[
        Union[
            Iterable[Union[None, str, float, int, bool]],
            Callable[[Any], Optional[object]],
        ]
    ] = None,
    name: Optional[str] = None
) -> Union[FixtureFunctionMarker, _FixtureFunction]:

通過上面的源碼可以看到fixture一共有5個(gè)參數(shù)分別是:name,scope,params,autouse,ids。每個(gè)參數(shù)在后面都會(huì)介紹到,這里安靜就先不做太多介紹。

栗子:

安靜拿開頭說的那個(gè)案例,如果一個(gè)測試類下用例,有的需要登錄,有的必須要登錄操作

import pytest

@pytest.fixture()
def login():
    print('輸入賬號(hào),輸入密碼')
    print('完成登錄功能!?。?!')
    yield
    print('---退出登錄---')

class Test_Login():

    def test_01(self,login):
        print('這是用例01')
        print('需要用到登錄!')

    def test_02(self):
        print('這是用例02')
        print('不需要登錄!')

    def test_03(self,login):
        print('這是用例03')
        print('這里需要用到登錄!')

if __name__ == '__main__':
    pytest.main(['-s','test_03.py'])

 這里會(huì)發(fā)現(xiàn),我在用例1和用例3中進(jìn)行通過fixture進(jìn)行使用,然后用例1和用例3都執(zhí)行了配置的登錄和退出登錄內(nèi)容。用例2,我沒用使用fixture方法,所以沒用執(zhí)行對(duì)應(yīng)代碼。

也可以通過--setup-show的方法來查看詳細(xì)的fixture信息

多個(gè)fixture使用

在一個(gè)測試用例中可以使用多個(gè)fixture的方法,執(zhí)行順序根據(jù)你傳入的順序進(jìn)行執(zhí)行。

import pytest

@pytest.fixture()
def login():
    print('輸入賬號(hào),輸入密碼')
    print('完成登錄功能?。。?!')
    yield
    print('---退出登錄---')

@pytest.fixture()
def add():
    print('測試開始執(zhí)行!')

class Test_Login():

    def test_01(self,login,add):
        print('這是用例01')
        print('需要用到登錄!')

    def test_02(self):
        print('這是用例02')
        print('不需要登錄!')

    def test_03(self,add,login):
        print('這是用例03')
        print('這里需要用到登錄!')

if __name__ == '__main__':
    pytest.main(['-s','test_03.py'])

 

結(jié)果可以看出來,用例1:把login方法的fixture放在了前面,先執(zhí)行的login方法后執(zhí)行的add,用例3:add方法在前面,login方法在后面,執(zhí)行也是add先執(zhí)行,login后執(zhí)行。

fixture相互調(diào)用

其實(shí)fixture之間也是可以進(jìn)行相互調(diào)用的。

import pytest


@pytest.fixture()
def login():
    print('輸入賬號(hào),輸入密碼')
    print('完成登錄功能!?。?!')
    yield
    print('---退出登錄---')


@pytest.fixture()
def add(login):
    print('測試開始執(zhí)行!')
    yield
    print('測試結(jié)束!')

class Test_Login:

    def test_01(self, add):
        print('------用例01------')

    def test_02(self):
        print('------用例02------')

    def test_03(self,login):
        print('------用例03------')


if __name__ == '__main__':
    pytest.main(['-s', 'test__01.py'])

 

 通過上面的執(zhí)行結(jié)果可以看到,我們fixture中的login函數(shù)被add函數(shù)進(jìn)行調(diào)用了,然后在用例中直接執(zhí)行add,login中的內(nèi)容也進(jìn)行了執(zhí)行

 

yield遇到異常后繼續(xù)執(zhí)行

在前面介紹fixture的時(shí)候說過,fixture執(zhí)行過程中,無論遇到什么異常,都會(huì)繼續(xù)執(zhí)行yeild后面的代碼(teardown),安靜舉例給大家看看

import pytest

@pytest.fixture()
def login():
    print('輸入賬號(hào),輸入密碼')
    print('完成登錄功能?。。?!')
    yield
    print('---退出登錄---')

class Test_Login():

    def test_01(self,login):
        print('這是用例01')
        print('需要用到登錄!')
        assert 1==2

    def test_02(self):
        print('這是用例02')
        print('不需要登錄!')

    def test_03(self,login):
        print('這是用例03')
        print('這里需要用到登錄!')

if __name__ == '__main__':
    pytest.main(['-s','test_03.py'])

 

從例子中很清楚的就發(fā)現(xiàn)我們的后置代碼在報(bào)錯(cuò)的情況下也會(huì)執(zhí)行。在自動(dòng)化測試過程中,無論測試結(jié)果如何,測試數(shù)據(jù)是肯定能清理的很干凈。

 

 

 

安靜簡單的介紹了fixture的用法,其實(shí)安靜覺得pytest中最實(shí)用的也就是fixture,后續(xù)安靜會(huì)慢慢的一點(diǎn)點(diǎn)進(jìn)行補(bǔ)充。

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
pytest---fixture中conftest.py文件
pytest---usefixtures簡單實(shí)用
pytest文檔32-allure描述用例詳細(xì)講解
pytest文檔17-fixture之a(chǎn)utouse=True
tep用戶手冊(cè)幫你從unittest過渡到pytest
超詳細(xì)的 pytest 教程 (二) 之前后置方法和 fixture 機(jī)制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服