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

Python自動化測試pytest中fixtureAPI簡單說明

 更新時間:2021年10月09日 11:22:02   作者:愛測試的高胖胖  
這篇文章主要為大家介紹了Python自動化測試pytest中fixtureAPI的簡單說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

什么是fixture

根據(jù)pytest官方文檔的說明,fixture可以簡單的歸納為具有以下功能的函數(shù):

  • 配置測試前系統(tǒng)的初始狀態(tài);
  • 定義傳入測試中的數(shù)據(jù)集;
  • 為批量測試提供數(shù)據(jù)源等

與xUnit風(fēng)格的setup和teardown的對比

fixture的功能與setup和teardown類似,可以實(shí)現(xiàn)setup和teardown的功能,但是對這些功能進(jìn)行了明顯的改進(jìn),主要有以下方面:

  • 調(diào)用靈活??梢栽跍y試函數(shù)、模塊、類或整個項(xiàng)目中聲明fixture的名稱來進(jìn)行調(diào)用;
  • 使用靈活。fixture即適用于簡單的單元測試又適用于復(fù)雜的功能測試。根據(jù)測試的需求可對fixture進(jìn)行參數(shù)化使用,并且可對fixture進(jìn)行重復(fù)使用。
  • fixture是以模塊化方式實(shí)現(xiàn)的,因此允許fixture調(diào)用其他fixture函數(shù);
  • teardown的實(shí)現(xiàn)邏輯更加清晰明了,并且方便進(jìn)行管理。

 fixture運(yùn)行報(bào)錯后,pytest的處理方式

通過上面的說明,我們可以知道fixture函數(shù)本身是允許調(diào)用其他fixture函數(shù)的。在這種情況下,測試運(yùn)行的時候,其中一個fixture函數(shù)報(bào)錯了,pytest的會如何處理呢?
通過pytest官方文檔的說明,我們可以知道:

  • pytest以線性的方式順序執(zhí)行測試用例所調(diào)用的fixture函數(shù);
  • 當(dāng)順序較前的fixture函數(shù)執(zhí)行報(bào)錯后,pytest會停止執(zhí)行該測試所調(diào)用的其他fixture,并且將測試標(biāo)記出錯;
  • 測試標(biāo)記錯誤,并不意味著測試未通過,只能說明測試無法嘗試執(zhí)行下去,因此我們需要盡可能的去為測試函數(shù)減少必要的依賴關(guān)系。

示例1:

1.在以下demo代碼中,order()返回類型存在問題,正確的應(yīng)該返回一個list,我們給其返回一個None:

import pytest
@pytest.fixture
def order():
    return None  #正確應(yīng)該返回[],我們給返回一個None
@pytest.fixture
def append_first(order):
    order.append(1)
@pytest.fixture
def append_second(order, append_first):
    order.extend([2])
@pytest.fixture(autouse=True)
def append_third(order, append_second):
    order += [3]
def test_order(order):
    assert order == [1, 2,3]

運(yùn)行后結(jié)果如下:

test_order被標(biāo)記Error,并且信息提示:test setup failed,說明是調(diào)用的fixture函數(shù)存在問題,且說明了錯誤原因。

在這里插入圖片描述

2.如果是test_order運(yùn)行未通,運(yùn)行信息會怎么樣提醒呢?我們按照以下demo修改測試代碼,修改test_order的斷言語句:

import pytest
@pytest.fixture
def order():
    return []   #返回一個list
@pytest.fixture
def append_first(order):
    order.append(1)
@pytest.fixture
def append_second(order, append_first):
    order.extend([2])
@pytest.fixture(autouse=True)
def append_third(order, append_second):
    order += [3]
def test_order(order):
    assert order == [1, 2]  #斷言失敗,正確應(yīng)該是 order==[1,2,3]

運(yùn)行結(jié)果如下:

test_order被標(biāo)記failed,且提醒是AssertionError,斷言出錯。這說明是test_order 本身運(yùn)行未通過。

在這里插入圖片描述

2.fixture API @pytest.fixture()說明

pytest使用@pytest.fixture()來聲明fixture方法。具體如何使用,我會在文章后面進(jìn)行詳細(xì)說明。在此,主要來簡單說明一下fixture()。

def fixture(
    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]:

參數(shù)說明:

2.1 scope

fixture函數(shù)的作用域。作用域從小到大依次為:function(默認(rèn))、class、module、packagesession。

還可傳入一個可調(diào)用對象,以實(shí)現(xiàn)動態(tài)修改fixture的作用域。

后面會單獨(dú)寫一篇文章,為大家詳細(xì)介紹fixture的scope。

2.2 params

傳入測試數(shù)據(jù)集,動態(tài)生成測試用例,每一條數(shù)據(jù)都單獨(dú)生成一條測試用例。通過request.param,可以獲取傳入的這些數(shù)據(jù)。

后面會單獨(dú)寫一篇文章,為大家詳細(xì)介紹fixture的參數(shù)化。

2.3 autouse

fixture自動應(yīng)用標(biāo)識。

如果是True,則在同作用域下的測試函數(shù),會自動調(diào)用該fixture;如果是False,則測試函數(shù)需要主動去調(diào)用該fixture。

后面會在介紹fixture調(diào)用方法的文章給大家詳細(xì)說明。

2.4 ids

測試用例ID標(biāo)識,與parmas傳入的參數(shù)一一對應(yīng)。當(dāng)未定義時,會自動生成id。

示例2:

1.傳入ids參數(shù),運(yùn)行以下demo:

import pytest
@pytest.fixture(params=[1,2,3],ids=['A','B','C'])
def ids(request):
    data=request.param
    print(f'獲取測試數(shù)據(jù){data}')
    return data
def test_ids(ids):
    print(ids)

運(yùn)行結(jié)果:

在執(zhí)行信息中,我們可以發(fā)現(xiàn)ids的三個參數(shù)和params的三個參數(shù)一一對應(yīng)顯示,并且ids的參數(shù)作為測試用例id的一部分呈現(xiàn)出來。

在這里插入圖片描述

2. 修改上面demo中的代碼,不傳入ids參數(shù),運(yùn)行一下:

import pytest
@pytest.fixture(params=[1,2,3]) #未傳入ids
def ids(request):
    data=request.param
    print(f'獲取測試數(shù)據(jù){data}')
    return data
def test_ids(ids):
    print(ids)

運(yùn)行結(jié)果:

查看運(yùn)行結(jié)果我們可以發(fā)現(xiàn),雖然沒有傳入ids,但是卻自動生成了ids。

在這里插入圖片描述

測試結(jié)束后,我們常常以測試報(bào)告的形式來匯報(bào)測試結(jié)果,如結(jié)合allure呈現(xiàn)測試結(jié)果。通過ids傳入的參數(shù)可以對測試用例進(jìn)行說明,這樣更方便我們查看測試結(jié)果。

2.5 name

fixture的別名。fixture的name默認(rèn)是@pytest.fixture所裝飾的函數(shù)的函數(shù)名。使用fixture的別名可以提高代碼的閱讀性。

示例3:
以下面的demo為例:

import pytest
@pytest.fixture()
def login():
    print('login')
class SubClass:
    def sub_login(self):
        print('subcalss_login')
class TestCase:
    def test_case1(self,login):  #調(diào)用fixture——login
        login=SubClass()  #定義一個login并實(shí)例化SubClass
        login.sub_login() #調(diào)用SubClass中的sub_login()
        print('這是testcase1')

我們定義了一個fixture函數(shù)——login(),同時在test_case1中實(shí)例化了一個Subclass類,并起名為login,然后調(diào)用了SubClass類中的sub_login()。如果代碼復(fù)雜的情況,很容易將fixture函數(shù)的login與SubClass實(shí)例的login弄混淆,增加代碼的閱讀的復(fù)雜度。

當(dāng)我們使用fixture別名的話,在閱讀代碼的時候就很容易進(jìn)行區(qū)分。

@pytest.fixture(name='module_login') 
def login():
    print('login')
class TestCase:
    def test_case1(self,module_login):  #使用fixture別名:module_login
        login=SubClass()  #定義一個login并實(shí)例化SubClass
        login.sub_login() #調(diào)用SubClass中的sub_login()
        print('這是testcase1')

注意:

當(dāng)使用name參數(shù)后,則無法再通過@pytest.fixture所裝飾的函數(shù)的函數(shù)名來進(jìn)行調(diào)用,必須使用name所指定fixture別名來調(diào)用。

2.6 fixture_function

目前pytest官方文檔未給出具體說明。

文末說明:
以上內(nèi)容是我在閱讀pytest官方文檔后,依照個人理解進(jìn)行整理。內(nèi)容可能會有理解錯誤之處,歡迎大家留言指正。謝謝!

更多關(guān)于自動化測試pytest中fixtureAPI的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python使用turtle繪制有趣的龍年祝福動畫

    Python使用turtle繪制有趣的龍年祝福動畫

    這篇文章主要介紹了Python的內(nèi)置庫——小海龜(turtle),它是一個非常實(shí)用的繪畫工具,不僅可以幫助我們繪制圖形,還能讓我們查看整個繪畫過程,下面我們就來看看如何使用turtle繪制有趣的龍年祝福動畫吧
    2024-01-01
  • pyqt5 textEdit、lineEdit操作的示例代碼

    pyqt5 textEdit、lineEdit操作的示例代碼

    這篇文章主要介紹了pyqt5 textEdit、lineEdit操作的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python增強(qiáng)賦值和共享引用注意事項(xiàng)小結(jié)

    Python增強(qiáng)賦值和共享引用注意事項(xiàng)小結(jié)

    這篇文章主要給大家介紹了關(guān)于Python增強(qiáng)賦值和共享引用注意事項(xiàng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 使用Pytorch Geometric進(jìn)行鏈接預(yù)測的實(shí)現(xiàn)代碼

    使用Pytorch Geometric進(jìn)行鏈接預(yù)測的實(shí)現(xiàn)代碼

    PyTorch Geometric (PyG)是構(gòu)建圖神經(jīng)網(wǎng)絡(luò)模型和實(shí)驗(yàn)各種圖卷積的主要工具,在本文中我們將通過鏈接預(yù)測來對其進(jìn)行介紹,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2023-10-10
  • python提取文件中特定字符串方法實(shí)例

    python提取文件中特定字符串方法實(shí)例

    今天搞了一天的文本處理,發(fā)現(xiàn)python真的太適合做數(shù)據(jù)處理了,下面這篇文章主要給大家介紹了關(guān)于python提取文件中特定字符串的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Flask框架通過Flask_login實(shí)現(xiàn)用戶登錄功能示例

    Flask框架通過Flask_login實(shí)現(xiàn)用戶登錄功能示例

    這篇文章主要介紹了Flask框架通過Flask_login實(shí)現(xiàn)用戶登錄功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了flask框架使用Flask_login實(shí)現(xiàn)用戶登陸功能的具體操作步驟、相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Python利用Turtle庫繪制一顆櫻花樹

    Python利用Turtle庫繪制一顆櫻花樹

    后唐李煜曾說道,櫻花落盡春將困,秋千架下歸時。漏暗斜月遲遲,花在枝。櫻花落盡的時候春天也將過去了,秋千架下歸去時。天上的斜月姍姍來遲,花還在枝頭。本文將用Python+Turtle繪制一顆櫻花樹,感興趣的可以嘗試一下
    2022-04-04
  • 以Python的Pyspider為例剖析搜索引擎的網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)方法

    以Python的Pyspider為例剖析搜索引擎的網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)方法

    這篇文章主要介紹了以Python的Pyspider為例剖析搜索引擎的網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)方法,Pyspider是一個開源項(xiàng)目、用Python語言編寫十分簡潔且具有爬蟲程序的代表性,需要的朋友可以參考下
    2015-03-03
  • 探究Python中isalnum()方法的使用

    探究Python中isalnum()方法的使用

    這篇文章主要介紹了探究Python中isalnum()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python中inplace、subset參數(shù)的意義及說明

    Python中inplace、subset參數(shù)的意義及說明

    這篇文章主要介紹了Python中inplace、subset參數(shù)的意義及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

新余市| 长顺县| 湘潭市| 马鞍山市| 鄂伦春自治旗| 布尔津县| 酉阳| 丰城市| 武义县| 唐山市| 广宁县| 湟中县| 玉树县| 徐水县| 平塘县| 策勒县| 嘉祥县| 全南县| 浏阳市| 宜都市| 武定县| 漯河市| 泗阳县| 额尔古纳市| 普陀区| 昆山市| 芮城县| 安义县| 临朐县| 大姚县| 凌海市| 凤城市| 安义县| 浦东新区| 嵊州市| 砀山县| 绥德县| 焦作市| 德州市| 南溪县| 奇台县|