手把手教你pytest測試框架(7)-fixture裝飾器

2021-02-21 光榮之路

    文 | 遠山近海

手把手教你pytest測試框架(1)-初識框架

手把手教你pytest測試框架(2)-參數講解

手把手教你pytest測試框架(3)-用例失敗重跑

手把手教你pytest測試框架(4)-前置和後置

手把手教你pytest測試框架(5)-mark標記裝飾器

概念fixture用來完成那些需要多次重複執行的用例,比如需要先退出,再更換其他用戶登錄。我們可以把用於退出和登錄的用例的函數比如叫做A函數,在A函數的前面加上@pytest.fixture()裝飾器,這樣,這個A函數就可以被其他函數直接調用了,只要其他用例函數在執行前需要有先進行退出再更換其他用戶登錄的操作,都可以直接調A函數。fixture有點類似於前置setup,但setup是針對所有用例的,即所有用例在執行前先執行前置setup,而fixture則是針對單個用例,即某單個用例在執行前要先執行fixture。fixture的設置我們要設置一個fixture函數,只要在一個函數前面加上@pytest.fixture()裝飾器,它就成了fixture函數。fixture類與普通類的不同類名稱必須以Test_開頭,這裡包含了兩個信息,第一是必須Test_開頭,第二是首字母T必須大寫,在寫普通類時,雖然首字母也大寫,但那不是語法強制要求,而pytest類是語法強制要求fixture的作用範圍fixture函數隻作用於其所在的文件,不能跨文件調用,雖然pytest可以通過命令來執行所在目錄下的所有py文件,但fixture不行,如果想跨文件,則需要把fixture寫在conftest.py文件裡。注意:conftest.py是固定寫法,只要和其他py文件在同一目錄下,且該目錄下擁有__init__.py文件即可。注意:conftest.py文件無需import,pytest會自動查找,只要別把名寫錯了就好。fixture的調用方法簡述我們有兩大類,5種調用方法可以調用fixture函數,分別是:

注意:

以上名稱為個人命名,並非官方定義

調用是可以疊加調的,即你可以設置多個fixture函數,在一個函數裡同時調用這多個fixtrue函數

fixture函數的命名最好不要加test_,雖然語法上允許,但為了和用例區分,最好不加

參數調用法中並沒有類參數總調用法,而裝飾器調用法中則有一個類裝飾器總調用法,所以這兩大類裡的方法並不完全是一一對應的

fixture函數的調用方法詳細說明參數調用法函數參數調用法1. 說明2. 單一調用
# coding=utf-8import pytest
@pytest.fixture()def fix(): print("執行fix")
def test_case1(fix): print("執行用例1")
def test_case2(fix): print("執行用例2")
if __name__ == '__main__': pass


可見,用例1和用例2在執行的時候,首先先調用了test_fix()。3. 疊加調用
# coding=utf-8import pytest
@pytest.fixture()def fix1(): print("執行fix1")
@pytest.fixture()def fix2(): print("執行fix2")
def test_case1(fix1,fix2): print("執行用例1")
def test_case2(fix1,fix2): print("執行用例2")
if __name__ == '__main__': pass

可見,疊加調用後,fixtrue函數被按照參數的書寫順序調用。類參數分別調用法1. 說明在類的每個函數裡分別通過參數的形式調用fixture函數2. 單一調用

# coding=utf-8import pytest
@pytest.fixture()def fix1(): print("執行fix1")
@pytest.fixture()def fix2(): print("執行fix2")
@pytest.fixture()def fix3(): print("執行fix3")
class Test_case:
    def test_case1(self,fix1): print("執行用例1")
    def test_case2(self,fix2): print("執行用例2")
    def test_case3(self,fix3): print("執行用例3")
if __name__ == '__main__': pytest.main(["-s", "test_study.py"])

test_study.py 執行fix1

執行用例1

.執行fix2

執行用例2

.執行fix3

執行用例3

3. 疊加調用

# coding=utf-8import pytest
@pytest.fixture()def fix1(): print("執行fix1")
@pytest.fixture()def fix2(): print("執行fix2")
@pytest.fixture()def fix3(): print("執行fix3")
class Test_case: def test_case1(self,fix1,fix2,fix3): print("執行用例1")
if __name__ == '__main__': pytest.main(["-s", "test_study.py"])

test_study.py 執行fix1

執行fix2

執行fix3

執行用例1

(未完待續)


👆單擊連結直達、長按諮詢吳老師或公眾號內回復「2」

無論上課或自學,

你首先需要準備:

每天 2 小時+的學習時間,

每天堅持寫代碼的習慣!

有投入才有產出,

10k+的漲幅需要 1 年以上的努力!

祝你成功!

光榮之路出品

測試大佬和小白的故事

招聘QQ群:203715128

相關焦點

  • 基於Pytest框架的自動化測試開發實踐(萬字長文入門篇)
    「 Pytest是Python的一種易用、高效和靈活的單元測試框架,可以支持單元測試和功能測試。本文不以介紹Pytest工具本身為目的,而是以一個實際的API測試項目為例,將Pytest的功能應用到實際的測試工程實踐中,教大家將Pytest用起來。
  • Python測試框架Pytest的常用插件測試報告
    二、allure-pytest 生成 Allure 測試報告Allure 框架是一個靈活的輕量級多語言測試報告工具,它不僅以 Web 的方式展示了簡介的測試結果,而且允許參與開發過程的每個人從日常執行的測試中最大限度的提取有用信息。
  • 7k Star 的 Python 測試框架入門指南
    Pytest 是一款 Python 測試框架及測試運行器。在本指南中,我們將會介紹 pytest 最有用和常見的配置和用法,以及幾個 pytest 插件和外部庫。儘管 Python 的標準庫中已經自帶了 unittest 模塊,並且也還有其他 Python 測試框架(例如 nose2 或 Ward),但 pytest 仍然是我的最愛。
  • pytest文檔42-fixture參數化params
    前言參數化是自動化測試裡面必須掌握的一個知識點,用過 unittest 框架的小夥伴都知道使用ddt 來實現測試用例的參數化。pytest 測試用例裡面對應的參數可以用 parametrize 實現,隨著用例的增多,我們的需求也會越來越多,那麼如何在 fixture 中使用參數呢?fixture 源碼先看下 fixture 源碼,有這幾個參數:scope,params,autouse,ids,name。
  • Pytest中conftest.py共享fixture(五)
    有一點首先需要確認的的是,pytest中的fixture是pytest用於將測試前後進行預備,清理工作的代碼分離出核心測試邏輯的一種機制
  • pytest(8):fixture與conftest.py結合使用
    上一篇介紹了fixture scope的幾種使用方式,除了直接寫入到用例頁,也可以使用conftest.py文件達到同樣的效果。  1.conftest.py名稱是固定的,必須是這個不能變。  2.與要調用的包在一個目錄下,並且這個包下要有__init__.py   3.使用的時候不需要導入 conftest.py,pytest 會自動識別到這個文件  4.放到項目的根目錄下可以全局調用,放到某個 package 下,就在這個 package 內有效。
  • 實戰 | 接口自動化測試框架開發(Pytest+Allure+AIOHTTP+用例自動生成)
    認可的測試用例首先說明下 pytest 的運行機制,pytest 首先會在當前目錄下找 conftest.py 文件,如果找到了,則先運行它,然後根據命令行參數去指定的目錄下找 test 開頭或結尾的 .py 文件,如果找到了,如果找到了,再分析 fixture,如果有 session 或 module 類型的,並且參數 autotest=True 或標記了 pytest.mark.usefixtures
  • 技術面試沒過,居然是因為沒用過 pytest 單元測試框架
    他說面試官問了一些 pytest 單元測試框架相關的知識,包括什麼插件系統和用力篩選。但是他之前的公司用的技術是基於 unittest 的,沒有用過 pytest。也就是因此被面試官給卡住了。實際上他在面試之前已經了解過 pytest 的一些基礎用法,但是網上的一些資料,都是停留基礎講解,沒有深入到 pytest 內部運行和一些高級特性。
  • python pytest接口自動化框架搭建
    pytest2.編寫單測用例在pytest框架中,有如下約束:所有的單測文件名都需要滿足test_*.py格式或*_test.py格式。此時,在執行pytest命令時,會自動從當前目錄及子目錄中尋找符合上述約束的測試函數來執行。
  • [接口測試_B] 04 Pytest斷言處理_告警斷言
    pytest中對告警進行斷言採用pytest.warns()方法,其斷言的方法與pytest.raises()類似。pytest.warns()除了能斷言告警外,還能夠捕獲告警信息,並對捕獲的告警信息進行分類處理,可以設定出現特定告警信息時,則用例執行失敗。
  • 乾貨 | 一文搞定 pytest 自動化測試框架(一)
    簡介pytest 是一個成熟的全功能 Python 測試工具,可以幫助您編寫更好的程序。它與 Python 自帶的 Unittest 測試框架類似,但 pytest 使用起來更簡潔和高效,並且兼容 unittest 框架。
  • python自動化測試之pytest框架
    pytest測試框架也是主流的一個測試框架,想比於unnitest框架來說,其不需要像unittest那樣單獨創建類繼承unittest.TestCase,而只需要創建測試類或者測試文件,然後以test開頭,pytest可以按照這個規則找到測試用例並執行。
  • 細說unittest單元測試框架
    一、單元測試框架說明 單元測試是指在編程中,針對程序模塊的最小單元(類中的方法)進行正確性檢驗的測試工作。python+selenium自動化測試中通常使用unittest或者pytest作為單元測試框架。
  • Pytest系列(6) - conftest.py的詳細講解
    conftest.py的出現,就是為了解決上述問題,單獨管理一些全局的fixture conftest.py配置fixture注意事項pytest會默認讀取conftest.py裡面的所有fixtureconftest.py 文件名稱是固定的,不能改動conftest.py只對同一個package下的所有測試用例生效不同目錄可以有自己的
  • Pytest之命令行執行
    基於SAAS化的架構下,特別是面對to B類型的產品,那麼測試經常面對的就是如何來測試每個上層應用。其實在底層微服務共享的模式下,更多的關注底層的微服務的測試,而對於上層應用來說,只需要隨機的選擇一個使用產品活躍度高的用戶來進行測試就可以了,從這個架構的模式下這樣的測試思路是沒有問題的,而且也是成立的。
  • pytest「conftest、pytest參數化、重運行、出測試報告」
    3.一個文件夾下不宜放太多的.py文件,不然你會發現一個文件夾下的文件列表會很長。具體怎麼放,視實際情況而定,切記不可死讀書。二、pytest參數化pytest當中不能使用ddt。流程性質的東西,在pytest裡面叫做參數化。
  • 同時連接多臺手機,使用appium實現app自動化測試
    環境準備appium的安裝:adt,nodejs,appium的python庫,appium serverpytest的安裝:pytestallure的安裝:allure的python庫pytest-allure-adaptor
  • Pytest丨如何使用全功能的Python測試框架?小白必看
    關注我,每周分享軟體測試技術乾貨、面試經驗,想要進入軟體測試學習交流群的可以直接私信我哦~~我們在寫自動化的過程中,用例的斷言也是至關重要的,斷言可以幫助我們判斷用例測試點是否成功和失敗。當然在我們這麼強大的pytest框架中,斷言也是比較強大的。為什麼?繼續往下看。
  • Pytest測試用例之setup與teardown方法(二)
    框架類裡面的前置與後置用法setup、teardown ]以下代碼是類裡面的前置後置簡要代碼,我們一起看看他的執行順序# coding=utf-8# authou:shichao# python測試社區學習記錄import pytestclass Testcaselist(): # 類裡面的 def setup
  • 自動化測試面試題(附答案)
    答:(junit、unittest、testng、 pytest ,優先python語言,用過pytest或unittest框架的;只會selenium能力較弱)2、使用什麼測試框架做的上一個項目的自動化測試?說下怎麼做的?對自動化的理解?