最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytest中fixture函數(shù)使用

 更新時間:2023年02月07日 10:35:09   作者:測試中二  
本文主要介紹了pytest中fixture函數(shù)使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

setup和teardown能實現(xiàn)在測試用例執(zhí)行之前或之后做一些操作,但是這種是整個測試腳本全局生效的;

如果我們想實現(xiàn)某些用例執(zhí)行之前進行登錄,某些用例執(zhí)行之前不需要進行登錄,這種場景我們再使用setup和teardown就無法實現(xiàn)了,這時候我們就需要用到fixture功能了。

fixture函數(shù)

fixture(scope="function", params=None, autouse=False, ids=None, name=None)

參數(shù)說明:

1、scope:fixture函數(shù)的作用域;可選值:function(默認)、class、module、session

  • function:作用于每個方法或函數(shù),每個方法或函數(shù)都運行一次
  • class:作用于整個class類,每個class中的所有test只運行一次
  • module:作用于整個模塊,每個module中的所有test只運行一次
  • session:作用于整個session,整個session只運行一次(慎用)

2、params:列表類型;一個可選的參數(shù)列表;它將會多次調(diào)用被fixture標記的方法和所有用到這個fixture的test測試用例;默認為None;當前調(diào)用參數(shù)可以用 request.param 來獲取。

3、autouse:如果為True,則為所有測試用例激活fixture,運行測試用例的時候會自動運行被fixture標記的方法;如果為False,則需要顯示指定來激活fixture,不會自動運行。

4、ids:id字符串列表,與params相對應(yīng),因此它們也是測試的一部分。如果沒有提供ids,那么將會從params來自動生成。

5、name:fixture的名稱。默認為被fixture裝飾器標記的函數(shù)名。

fixture的使用

1、通過參數(shù)引用fixture函數(shù)

舉例:

# file_name:test_fixture.py
 
 
import pytest
 
 
class Test_A:
 
    @pytest.fixture()
    def before(self):
        print("\n--------before fixture has ran--------")
 
    def test_a(self, before):    # test_a方法以參數(shù)的形式傳入了被fixture標記的函數(shù),fixture的名稱默認為被fixture標記的函數(shù)名
        print('-------test_a has ran-------')
        assert 1
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

運行結(jié)果:

從結(jié)果中可以看到被fixture標記的函數(shù)before會優(yōu)先于測試用例test_a運行。

2、通過使用name參數(shù)來引用fixture函數(shù)

①name參數(shù)表示fixture的重命名;

②通常來說使用 fixture 的測試函數(shù)會將 fixture 的函數(shù)名作為參數(shù)傳遞,但是 pytest 也允許將fixture重命名。

舉例1:

# file_name:test_fixture.py
 
 
import pytest
 
 
class Test_A:
 
    @pytest.fixture(name="before_fixture_name")
    def before(self):
        print("\n--------before fixture has ran--------")
 
    def test_a(self, before_fixture_name):    # test_a方法以參數(shù)的形式傳入了被fixture標記的函數(shù),這里的fixture名稱為:before_fixture_name,如果不設(shè)置name參數(shù),則fixture的名稱默認為被fixture標記的函數(shù)名
        print('-------test_a has ran-------')
        assert 1
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

舉例2:為fixture函數(shù)重命名之后,不可以在使用fixture函數(shù)的函數(shù)名來調(diào)用,只能通過fixture函數(shù)重命名的新名字來調(diào)用。

3、通過@pytest.mark.usefixtures('fixture函數(shù)名')函數(shù)的形式引用fixture函數(shù)

舉例:

# file_name: test_fixture.py
 
 
import pytest
 
 
@pytest.fixture()  # 被fixture標記的函數(shù)也可以應(yīng)用在測試類的外部,使用@pytest.mark.usefixtures()裝飾器來引用
def before():
    print("\n--------before fixture has ran--------")
 
 
@pytest.mark.usefixtures("before")  # 通過使用usefixtures()來引用fixture,此時usefixtures()函數(shù)的入?yún)⑹莊ixture函數(shù)的函數(shù)名
class Test_A:
 
    def test_a(self):
        print('-------test_a has ran-------')
        assert 1
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

運行結(jié)果:

從結(jié)果中可以看到被fixture標記的函數(shù)before會優(yōu)先于測試用例test_a運行。

4、通過autouse=True設(shè)置默認執(zhí)行fixture函數(shù)

①fixture函數(shù)的autouse參數(shù)默認等于False;

②fixture函數(shù)的autouse參數(shù)若為True,剛每個測試函數(shù)都會自動調(diào)用該fixture函數(shù),而且無需傳入fixture函數(shù)名。

舉例:

# file_name: test_fixture.py
 
 
import pytest
 
 
@pytest.fixture(autouse=True)  # 通過參數(shù)autouse=True來設(shè)置fixture默認運行
def before():
    print("\n--------before fixture has ran--------")
 
 
class Test_A:
 
    def test_a(self):
        print('-------test_a has ran-------')
        assert 1
 
    def test_b(self):
        print('-------test_b has ran-------')
        assert 1
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

運行結(jié)果:

從結(jié)果中可以看到我們并沒有顯示指定test_a和test_b使用fixture,但是在執(zhí)行測試用例之前卻執(zhí)行了fixture,這就是因為我們將fixture設(shè)置成了autouse=True。

5、fixture作用域設(shè)置成function

舉例:

# file_name: test_fixture.py
 
 
import pytest
 
 
@pytest.fixture(scope="function", autouse=True)  # 作用域設(shè)置成function,通過參數(shù)autouse=True來設(shè)置fixture默認運行
def before():
    print("\n--------before fixture has ran--------")
 
 
class Test_A:
 
    def test_a(self):
        print('-------test_a has ran-------')
        assert 1
 
    def test_b(self):
        print('-------test_b has ran-------')
        assert 1
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

運行結(jié)果:

從結(jié)果中可以看到將fixture的作用域設(shè)置成scope=function后,每個test測試用例執(zhí)行前都會執(zhí)行一次被fixture標記的函數(shù)。

并且通過跟上一個例子對比我們可以看到設(shè)置 scope=function 和不設(shè)置scope參數(shù)的執(zhí)行結(jié)果是一致的,這說明scope參數(shù)的默認值是function。

6、fixture作用域設(shè)置成class

舉例:

# file_name: test_fixture.py
 
 
import pytest
 
 
@pytest.fixture(scope="class", autouse=True)  # 作用域設(shè)置成class,通過參數(shù)autouse=True來設(shè)置fixture默認運行
def before():
    print("\n--------before fixture has ran--------")
 
 
class Test_A:
 
    def test_a(self):
        print('-------test_a has ran-------')
        assert 1
 
    def test_b(self):
        print('-------test_b has ran-------')
        assert 1
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

運行結(jié)果:

從運行結(jié)果中可以看到測試類中有兩個測試用例,但是fixture卻只執(zhí)行了一次。

7、fixture的返回值使用

舉例:

# file_name: test_fixture.py
 
 
import pytest
 
 
@pytest.fixture()
def return_data():
    print("\n--------before fixture has ran--------")
    return 2    # 返回值
 
 
class Test_A:
 
    def test_a(self, return_data):
        print('-------test_a has ran-------')
        assert 1 == return_data # 拿到返回值做斷言
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

運行結(jié)果:

從結(jié)果中看到我們拿到了fixture的返回值為2,在測試用例中拿到返回值做斷言,斷言失敗。

8、fixture的params參數(shù)使用

①params形參是fixture函數(shù)的可選形參列表,支持列表傳入;

②不傳此參數(shù)時默認為None;

③每個param的值fixture函數(shù)都會去調(diào)用執(zhí)行一次,類似for循環(huán)。

④可與參數(shù)ids一起使用,作為每個參數(shù)的標識,類似于用例參數(shù)化時的ids作用。

舉例:

# file_name: test_fixture.py
 
 
import pytest
 
 
@pytest.fixture(params=[1, 2, 3])
def return_data(request):   # 傳入?yún)?shù)request,request系統(tǒng)內(nèi)置的fixture
    print("\n--------before fixture has ran--------")
    return request.param  # 通過request.param 獲取當前傳入的參數(shù)
 
 
class Test_A:
 
    def test_a(self, return_data):
        print('-------test_a has ran,return_data的值為:{}-------'.format(return_data))
        assert 1 == return_data  # 拿到返回值做斷言
 
 
if __name__ == '__main__':
    pytest.main(['-s', 'test_fixture.py'])

運行結(jié)果:

從結(jié)果中我們可以看到測試用例執(zhí)行了3次。通過設(shè)置params參數(shù)會導(dǎo)致多次調(diào)用被fixture標記的函數(shù),并且使用該fixture函數(shù)的測試用例也會執(zhí)行多次。

9、fixture的params參數(shù)于ids參數(shù)結(jié)合使用

①fixture函數(shù)未配置ids參數(shù)之前:用例執(zhí)行后的標識為傳入的params參數(shù)。

②fixture函數(shù)配置ids參數(shù)之后:用例執(zhí)行后的標識為傳入的ids參數(shù)。并與params參數(shù)一一對應(yīng)。

10、fixture函數(shù)的相互調(diào)用(fixture函數(shù)與fixture函數(shù)之間的依賴關(guān)系)

舉例1:

import pytest
# fixtrue作為參數(shù),互相調(diào)用傳入
@pytest.fixture()
def account():
    a = "account"
    print("第一層fixture")
    return a
    
#Fixture的相互調(diào)用一定是要在測試類里調(diào)用這層fixture才會生次,普通函數(shù)單獨調(diào)用是不生效的
@pytest.fixture()   
def login(account):
    print("第二層fixture")
 
class TestLogin:
    def test_1(self, login):
        print("直接使用第二層fixture,返回值為{}".format(login))
 
    def test_2(self, account):
        print("只調(diào)用account fixture,返回值為{}".format(account))
 
 
if __name__ == '__main__':
    pytest.main()

運行結(jié)果1:

舉例2:如果一個fixture函數(shù)依賴另外一個fixture函數(shù),此時不能使@pytest.mark.usefixtures() 調(diào)用被依賴的fixture函數(shù),這種調(diào)用方式不會生效。而是需要用函數(shù)傳遞的方式才能生效。

# test_fixture_02.py
import pytest
 
 
@pytest.fixture()
def login_weibo():
    print("==============登陸微博===============")
 
 
@pytest.fixture()
# @pytest.mark.usefixtures("login_weibo")  #這種方式不會生效
def get_weibo_data(login_weibo):  # 這種方式才會生效
    """fixture函數(shù)依賴,需要用傳遞函數(shù)的方式"""
    print("=============獲取微博數(shù)據(jù)==============")
 
 
@pytest.mark.demo
class TestMyCode:
 
    @pytest.mark.usefixtures("get_weibo_data")
    def test_fixture_005(self):
        """fixture函數(shù)在測試腳本文件中"""
        assert 1 == 1

運行結(jié)果:

【注意】

①即使fixture函數(shù)之間支持相互調(diào)用,但普通函數(shù)直接使用fixture是不支持的,一定是在測試函數(shù)內(nèi)調(diào)用才會逐級調(diào)用生效。

②有多層fixture函數(shù)調(diào)用時,最先執(zhí)行的是最后一層fixture函數(shù),而不是先執(zhí)行傳入測試函數(shù)的fixture函數(shù)。

③上層fixture函數(shù)的值不會自動return,這里就類似函數(shù)相互調(diào)用一樣的邏輯。【函數(shù)調(diào)用值需要賦值給一個變量并使用】

到此這篇關(guān)于pytest中fixture函數(shù)使用的文章就介紹到這了,更多相關(guān)pytest fixture函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用OpenCV庫實現(xiàn)圖像幾何變化

    Python使用OpenCV庫實現(xiàn)圖像幾何變化

    幾何變換是通過數(shù)學(xué)變換將圖像的像素從一個位置映射到另一個位置的過程,在圖像處理領(lǐng)域,幾何變換是一個非常重要的操作,它可以改變圖像的位置、大小、方向或形狀,本文將介紹如何利用 Python 的 OpenCV 庫實現(xiàn)圖像的幾何變換,需要的朋友可以參考下
    2024-12-12
  • Django nginx配置實現(xiàn)過程詳解

    Django nginx配置實現(xiàn)過程詳解

    這篇文章主要介紹了Django nginx配置實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 詳解如何使用pandas進行時間序列數(shù)據(jù)的周期轉(zhuǎn)換

    詳解如何使用pandas進行時間序列數(shù)據(jù)的周期轉(zhuǎn)換

    時間序列數(shù)據(jù)是數(shù)據(jù)分析中經(jīng)常遇到的類型,為了更多的挖掘出數(shù)據(jù)內(nèi)部的信息,我們常常依據(jù)原始數(shù)據(jù)中的時間周期,將其轉(zhuǎn)換成不同跨度的周期,下面以模擬的K線數(shù)據(jù)為例,演示如何使用pandas來進行周期轉(zhuǎn)換,感興趣的朋友可以參考下
    2024-05-05
  • Python openpyxl模塊原理及用法解析

    Python openpyxl模塊原理及用法解析

    這篇文章主要介紹了Python openpyxl模塊原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Python編程快速上手——Excel表格創(chuàng)建乘法表案例分析

    Python編程快速上手——Excel表格創(chuàng)建乘法表案例分析

    這篇文章主要介紹了Python Excel表格創(chuàng)建乘法表,結(jié)合具體實例形式分析了Python接受cmd命令操作Excel文件創(chuàng)建乘法表相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • Pytorch自定義CNN網(wǎng)絡(luò)實現(xiàn)貓狗分類詳解過程

    Pytorch自定義CNN網(wǎng)絡(luò)實現(xiàn)貓狗分類詳解過程

    PyTorch是一個開源的Python機器學(xué)習(xí)庫,基于Torch,用于自然語言處理等應(yīng)用程序。它不僅能夠?qū)崿F(xiàn)強大的GPU加速,同時還支持動態(tài)神經(jīng)網(wǎng)絡(luò)。本文將介紹PyTorch自定義CNN網(wǎng)絡(luò)實現(xiàn)貓狗分類,感興趣的可以學(xué)習(xí)一下
    2022-12-12
  • Django通用類視圖實現(xiàn)忘記密碼重置密碼功能示例

    Django通用類視圖實現(xiàn)忘記密碼重置密碼功能示例

    今天小編就為大家分享一篇Django通用類視圖實現(xiàn)忘記密碼重置密碼功能示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python使用flask作為web服務(wù)器的代碼實現(xiàn)

    Python使用flask作為web服務(wù)器的代碼實現(xiàn)

    Python Flask 框架是一個輕量級的 Web 框架,它簡單易用,靈活多變,非常適合用于構(gòu)建小型到中型規(guī)模的 Web 應(yīng)用程序,本文給大家介紹了Python使用flask作為web服務(wù)器的代碼實現(xiàn),需要的朋友可以參考下
    2024-06-06
  • Django實現(xiàn)jquery select2帶搜索的下拉框

    Django實現(xiàn)jquery select2帶搜索的下拉框

    最近在開發(fā)一個web應(yīng)用中需要用到帶搜索功能下拉框,本文實現(xiàn)Django實現(xiàn)jquery select2帶搜索的下拉框,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python 中Django安裝和使用教程詳解

    Python 中Django安裝和使用教程詳解

    這篇文章主要介紹了python中Django安裝和使用教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07

最新評論

郁南县| 天等县| 安龙县| 尖扎县| 龙江县| 宁河县| 车险| 张掖市| 错那县| 崇义县| 湖口县| 镇赉县| 巨野县| 涿州市| 峨眉山市| 淮北市| 四平市| 怀宁县| 平果县| 磐石市| 常山县| 郴州市| 吉首市| 麦盖提县| 新干县| 沙洋县| 平南县| 彭山县| 周至县| 深州市| 迭部县| 城步| 溧水县| 娱乐| 册亨县| 宝清县| 昌平区| 荔波县| 汝州市| 白城市| 筠连县|