国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python自動化測試pytest中fixtureAPI簡單說明

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

2022-01-21 00:01愛測試的高胖胖 Python

這篇文章主要為大家介紹了Python自動化測試pytest中fixtureAPI的簡單說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

什么是fixture

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

  • 配置測試前系統的初始狀態;
  • 定義傳入測試中的數據集;
  • 為批量測試提供數據源等

 

與xUnit風格的setup和teardown的對比

fixture的功能與setup和teardown類似,可以實現setup和teardown的功能,但是對這些功能進行了明顯的改進,主要有以下方面:

  • 調用靈活。可以在測試函數、模塊、類或整個項目中聲明fixture的名稱來進行調用;
  • 使用靈活。fixture即適用于簡單的單元測試又適用于復雜的功能測試。根據測試的需求可對fixture進行參數化使用,并且可對fixture進行重復使用。
  • fixture是以模塊化方式實現的,因此允許fixture調用其他fixture函數;
  • teardown的實現邏輯更加清晰明了,并且方便進行管理。

 

fixture運行報錯后,pytest的處理方式

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

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

示例1:

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

import pytest
@pytest.fixture
def order():
  return None  #正確應該返回[],我們給返回一個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]

運行后結果如下:

test_order被標記Error,并且信息提示:test setup failed,說明是調用的fixture函數存在問題,且說明了錯誤原因。

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

2.如果是test_order運行未通,運行信息會怎么樣提醒呢?我們按照以下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]  #斷言失敗,正確應該是 order==[1,2,3]

運行結果如下:

test_order被標記failed,且提醒是AssertionError,斷言出錯。這說明是test_order 本身運行未通過。

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

 

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

pytest使用@pytest.fixture()來聲明fixture方法。具體如何使用,我會在文章后面進行詳細說明。在此,主要來簡單說明一下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]:

參數說明:

2.1 scope

fixture函數的作用域。作用域從小到大依次為:function(默認)classmodulepackagesession

還可傳入一個可調用對象,以實現動態修改fixture的作用域。

后面會單獨寫一篇文章,為大家詳細介紹fixture的scope。

2.2 params

傳入測試數據集,動態生成測試用例,每一條數據都單獨生成一條測試用例。通過request.param,可以獲取傳入的這些數據。

后面會單獨寫一篇文章,為大家詳細介紹fixture的參數化。

2.3 autouse

fixture自動應用標識。

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

后面會在介紹fixture調用方法的文章給大家詳細說明。

2.4 ids

測試用例ID標識,與parmas傳入的參數一一對應。當未定義時,會自動生成id。

示例2:

1.傳入ids參數,運行以下demo:

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

運行結果:

在執行信息中,我們可以發現ids的三個參數和params的三個參數一一對應顯示,并且ids的參數作為測試用例id的一部分呈現出來。

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

2. 修改上面demo中的代碼,不傳入ids參數,運行一下:

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

運行結果:

查看運行結果我們可以發現,雖然沒有傳入ids,但是卻自動生成了ids

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

測試結束后,我們常常以測試報告的形式來匯報測試結果,如結合allure呈現測試結果。通過ids傳入的參數可以對測試用例進行說明,這樣更方便我們查看測試結果。

2.5 name

fixture的別名。fixture的name默認是@pytest.fixture所裝飾的函數的函數名。使用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):  #調用fixture――login
      login=SubClass()  #定義一個login并實例化SubClass
      login.sub_login() #調用SubClass中的sub_login()
      print('這是testcase1')

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

當我們使用fixture別名的話,在閱讀代碼的時候就很容易進行區分。

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

注意:

當使用name參數后,則無法再通過@pytest.fixture所裝飾的函數的函數名來進行調用,必須使用name所指定fixture別名來調用。

2.6 fixture_function

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

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

更多關于自動化測試pytest中fixtureAPI的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/gjj920318/article/details/118550093

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产真实乱全部视频 | 麻豆产精国品免费 | 羞羞在线观看 | 亚洲精品一区 | 亚洲电影在线观看 | 高清一区二区三区 | 国产白浆在线观看 | 综合久久久 | 久久国产欧美日韩精品 | 免费一级毛片在线观看 | 亚洲九九九 | 亚洲网视频 | 欧美视频第一页 | 成人激情在线观看 | 国外爱爱视频 | 九色在线视频 | 久久精品久久久 | 日本久久久久久 | 久久精品99 | 成人激情在线播放 | 国产伦精品一区二区三区照片91 | 激情五月婷婷丁香 | 韩日中文字幕 | 一本久久综合亚洲鲁鲁五月天 | 二区三区在线观看 | 综合色在线 | yw193.com尤物在线 | 欧美激情亚洲 | 亚洲视频一区 | 亚洲欧美国产精品专区久久 | 亚洲精品一区二区三区在线观看 | 97国产精品 | 伦乱视频| 欧美一级一区 | 欧美日本韩国在线 | 国产精品久久久久久亚洲调教 | 成人中文网 | 一区二区三区 在线 | 免费成人高清 | 黄色片免费观看网站 | 国产精品久久久久久久久久小说 |