pytest自動化測試 - pytest夾具的基本概念

<< 返回目錄

1 pytest自動化測試 - pytest夾具的基本概念

??夾具可以為測試用例提供資源(測試數據)、執行預置條件、執行后置條件,夾具可以是函數、類或模塊,使用@pytest.fixture裝飾器進行標記。

1.1 夾具的作用范圍

??夾具的作用范圍:

  • 函數范圍:夾具默認范圍是函數級,即,每個測試函數執行時,都會執行一遍夾具的前置和后置條件
  • 類范圍:夾具的前置條件在類的第一個測試函數執行前執行,在類的最后一個測試函數執行后執行。
  • 模塊范圍:夾具的前置條件在模塊的第一個測試函數執行前執行,在模塊的最后一個測試函數執行后執行。
  • 會話范圍:夾具的前置條件在測試會話開始時執行一次,后置條件在測試會話結束時執行一次。

1.1.1 函數范圍的夾具

??默認(未指定參數)時是函數級的范圍。

import pytest@pytest.fixture
def setup_resource():# 準備資源resource = "This is a test resource"print("\n" + "="*65)print("BEGIN: 用例預置條件.")yield resource# 清理資源print("END: 用例`后置條件`.")def test_with_fixture(setup_resource):print("第一個用例開始".center(70))assert "test resource" in setup_resourceprint("第一個用例結束".center(70))def test_another_with_fixture(setup_resource):print("第二個用例開始".center(70))assert len(setup_resource) > 10print("第二個用例結束".center(70))

??yield前的語句是前置條件yield后的語句是后置條件。夾具中的前置條件后置條件,在每個測試用例中都會執行。

輸出:

============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_subf_fixture_001.py 
=================================================================
BEGIN: 用例預置條件.第一個用例開始                                第一個用例結束                                
.END: 用例`后置條件`.=================================================================
BEGIN: 用例預置條件.第二個用例開始                                第二個用例結束                                
.END: 用例`后置條件`.============================== 2 passed in 0.01s ==============================

??從報文可以看到,夾具中的前置條件在用例開始前執行,后置條件,在用例執行結束時執行。

1.1.2 類范圍的夾具

??通過參數@pytest.fixture(scope="class")可以指定夾具的類范圍

import pytest@pytest.fixture(scope="class")
def setup_class_resource():resource = "Class resource"print("\n" + "=" * 65)print("【預置條件】")yield resourceprint("【`后置條件`】.")class TestClassWithFixture:def test_class_fixture(self, setup_class_resource):print("第1個測試用例開始.")assert "Class" in setup_class_resourceprint("第1個測試用例結束.\n")def test_another_class_fixture(self, setup_class_resource):print("第2個測試用例開始.")assert len(setup_class_resource) > 10print("第2個測試用例結束.")

輸出:

============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 2 itemstest_ft_fixture_class_001.py 
=================================================================
【預置條件】
第1個測試用例開始.
第1個測試用例結束..第2個測試用例開始.
第2個測試用例結束.
.【`后置條件`】.============================== 2 passed in 0.01s ==============================

1.1.3 模塊范圍的夾具

??前置條件在模塊第一個測試函數執行前執行,后置條件在最后一個函數執行后執行。

import pytest@pytest.fixture(scope="module")
def setup_module_resource():resource = "Module resource"print("\n" + "=" * 65)print("【預置條件】")yield resourceprint("【`后置條件`】")def test_module_fixture1(setup_module_resource):print("第1個用例開始")assert "Module" in setup_module_resourceprint("第1個用例結束\n")def test_module_fixture2(setup_module_resource):print("第2個用例開始")assert len(setup_module_resource) > 10print("第2個用例結束\n")#這個函數函數沒有使用夾具
def test_module_fixture3():print("第3個用例開始")assert len("測試不用夾具的函數是否會干擾") > 10print("第3個用例結束")

輸出:

============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 3 itemstest_ft_fixture_module_001.py 
=================================================================
【預置條件】
第1個用例開始
第1個用例結束.第2個用例開始
第2個用例結束.第3個用例開始
第3個用例結束
.【`后置條件`】============================== 3 passed in 0.01s ==============================

??說明:模塊中即使存在測試函數沒有使用夾具,也不會干擾夾具中的預置條件和后置條件,預置條件始終保存在模塊開始執行前執行,后續條件在模塊的所有函數執行完時執行。

1.1.4 會話范圍的夾具

??下面的示例探索模塊范圍和會話范圍的區別,其中test_ft_fixture_module_001是上一個示例中的模塊范圍的測試代碼,使用from test_ft_fixture_module_001 import *將模塊的所有夾具和用例導入到本用例。

import pytest
from test_ft_fixture_module_001 import *@pytest.fixture(scope="session")
def setup_session_resource():resource = "Session resource"print("\n" + "=" * 65)print("【會話-`前置條件`】")yield resourceprint("【會話-`后置條件`】")def test_session_fixture1(setup_session_resource):print("會話-第1個用例開始")assert "Session" in setup_session_resourceprint("會話-第1個用例結束\n")def test_session_fixture2(setup_session_resource):print("會話-第2個用例開始")assert len(setup_session_resource) > 10print("會話-第2個用例結束\n")def test_session_fixture3():print("會話-第3個用例開始")assert len("測試沒有使用夾具的第3個用例對`后置條件`的影響") > 10print("會話-第3個用例結束")

輸出:

============================= test session starts =============================
platform win32 -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0
rootdir: D:\TYYSOFT\Study\Python\pytest
collected 6 itemstest_ft_fixture_session_001.py 
=================================================================
【模塊-預置條件】
模塊-第1個用例開始
模塊-第1個用例結束.模塊-第2個用例開始
模塊-第2個用例結束.模塊-第3個用例開始
模塊-第3個用例結束
.
=================================================================
【會話-`前置條件`】
會話-第1個用例開始
會話-第1個用例結束.會話-第2個用例開始
會話-第2個用例結束.會話-第3個用例開始
會話-第3個用例結束
.【模塊-`后置條件`】
【會話-`后置條件`】============================== 6 passed in 0.02s ==============================

從執行結果來看,模塊的預置條件在最開始執行,緊隨其后的是導入的模塊中的測試函數,而會話的前置條件只在當前模塊執行前才執行,后置條件是先執行了模塊的后置條件,再執行會話的后置條件


作者聲明:本文用于記錄和分享作者的學習心得,可能有部分文字或示例來源自豆包AI,由于本人水平有限,難免存在表達錯誤,歡迎留言交流和指教!
Copyright ? 2022~2025 All rights reserved.

<< 返回目錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67156.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

esp32-C3 實現DHT11(溫濕度)

安裝DHT傳感器庫&#xff1a; 在Arduino IDE中&#xff0c;進入項目 > 加載庫 > 管理庫。搜索DHT sensor library并安裝。 編寫代碼 定義引腳和傳感器類型初始化傳感器判斷傳感器是否正常讀取數據 源碼 #include <DHT.h> #include <DHT_U.h>// 定義DHT傳感器…

java構建工具之Gradle

自定義任務 任務定義方式&#xff0c;總體分為兩大類:一種是通過 Project 中的task()方法,另一種是通過tasks 對象的 create 或者register 方法。 //任務名稱,閉包都作為參數println "taskA..." task(A,{ }) //閉包作為最后一個參數可以直接從括號中拿出來println …

【Pytest】生成html報告中,中文亂碼問題解決方案

import pytestif __name__ "__main__":# 只運行 tests 目錄下的測試用例&#xff0c;并生成 HTML 報告pytest.main([-v, -s, --htmlreport.html, tests])可以以上方式生成&#xff0c;也可以在pytest.ini中設置 [pytest] addopts --htmlreport.html --self-contai…

MyBatis最佳實踐:提升數據庫交互效率的秘密武器

第一章&#xff1a;框架的概述&#xff1a; MyBatis 框架的概述&#xff1a; MyBatis 是一個優秀的基于 Java 的持久框架&#xff0c;內部對 JDBC 做了封裝&#xff0c;使開發者只需要關注 SQL 語句&#xff0c;而不關注 JDBC 的代碼&#xff0c;使開發變得更加的簡單MyBatis 通…

《Java程序設計》課程考核試卷

一、單項選擇題&#xff08;本大題共10個小題&#xff0c;每小題2分&#xff0c;共20分&#xff09; 1.下列用來編譯Java源文件為字節碼文件的工具是&#xff08; &#xff09;。 A.java B.javadoc C.jar D.javac 2…

【25考研】人大計算機考研復試該怎么準備?有哪些注意事項?

人大畢竟是老牌985&#xff0c;復試難度不會太低&#xff01;建議同學認真復習&#xff01;沒有機試還是輕松一些的&#xff01; 一、復試內容 由公告可見&#xff0c;復試包含筆試及面試&#xff0c;沒有機試&#xff01; 二、參考書目 官方無給出參考書目&#xff0c;可參照…

vue3中Teleport的用法以及使用場景

1. 基本概念 Teleport 是 Vue3 提供的一個內置組件&#xff0c;它可以將組件的內容傳送到 DOM 樹的任何位置&#xff0c;而不受組件層級的限制。這在處理模態框、通知、彈出菜單等需要突破組件層級限制的場景中特別有用。 1.1 基本語法 <template><teleport to&quo…

使用openwrt搭建ipsec隧道

背景&#xff1a;最近同事遇到了個ipsec問題&#xff0c;做的ipsec特性&#xff0c;ftp下載ipv6性能只有100kb, 正面定位該問題也蠻久了&#xff0c;項目沒有用openwrt, 不過用了開源組件strongswan, 加密算法這些也是內核自帶的&#xff0c;想著開源的不太可能有問題&#xff…

基于AnolisOS 8.6安裝GmSSL 3.1.1及easy_gmssl庫測試國密算法

測試環境 Virtual Box&#xff0c;AnolisOS-8.6-x86_64-minimal.iso&#xff0c;4 vCPU, 8G RAM, 60 vDisk。最小化安裝。需聯網。 系統環境 關閉防火墻 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld selinux關閉 cat /etc/selinux/co…

HTML從入門到精通:鏈接與圖像標簽全解析

系列文章目錄 01-從零開始學 HTML&#xff1a;構建網頁的基本框架與技巧 02-HTML常見文本標簽解析&#xff1a;從基礎到進階的全面指南 03-HTML從入門到精通&#xff1a;鏈接與圖像標簽全解析 文章目錄 系列文章目錄前言一、鏈接與圖像標簽&#xff08;HTML 標簽基礎&#xff…

[STM32 - 野火] - - - 固件庫學習筆記 - - -十一.電源管理系統

一、電源管理系統簡介 電源管理系統是STM32硬件設計和系統運行的基礎&#xff0c;它不僅為芯片本身提供穩定的電源&#xff0c;還通過多種電源管理功能優化功耗、延長電池壽命&#xff0c;并確保系統的可靠性和穩定性。 二、電源監控器 作用&#xff1a;保證STM32芯片工作在…

數字圖像處理:實驗六

uu們&#xff01;大家好&#xff0c;2025年的新年就要到來&#xff0c;咸魚哥在這里祝大家在2025年每天開心快樂&#xff0c;天天掙大錢&#xff0c;自由自在&#xff0c;健健康康&#xff0c;萬事如意&#xff01;&#xff08;要是咸魚哥嘴笨的話&#xff0c;還望大家多多包涵…

Langchain+文心一言調用

import osfrom langchain_community.llms import QianfanLLMEndpointos.environ["QIANFAN_AK"] "" os.environ["QIANFAN_SK"] ""llm_wenxin QianfanLLMEndpoint()res llm_wenxin.invoke("中國國慶日是哪一天?") print(…

上海亞商投顧:滬指沖高回落 大金融板塊全天強勢 上海亞商投

上海亞商投顧前言&#xff1a;無懼大盤漲跌&#xff0c;解密龍虎榜資金&#xff0c;跟蹤一線游資和機構資金動向&#xff0c;識別短期熱點和強勢個股。 一&#xff0e;市場情緒 市場全天沖高回落&#xff0c;深成指、創業板指午后翻綠。大金融板塊全天強勢&#xff0c;天茂集團…

農產品價格報告爬蟲使用說明

農產品價格報告爬蟲使用說明 # ************************************************************************** # * * # * 農產品價格報告爬蟲 …

3.4 Go函數作用域(標識符)

作用域標識符 簡單來說&#xff0c;作用域指的是標識符可以起作用的范圍&#xff0c;即其可見范圍。將標識符的可見性限制在一定范圍內&#xff0c;這個范圍就是作用域。 把標識符約束在一定的可見范圍內&#xff0c;這個范圍就是作用域。 1. 宇宙塊 特點&#xff1a;預定義…

kaggle比賽入門 - House Prices - Advanced Regression Techniques(第二部分)

本文承接上一篇 1. 分析住宅類型&#xff08;BldgType&#xff09;的分布以及它們與銷售價格&#xff08;SalePrice&#xff09;的關系 # 1. distribution of dwelling types and their relation to sale prices # BldgType: Type of dwellingdwelling_types df[BldgType].v…

使用shell命令安裝virtualbox的虛擬機并導出到vagrant的Box

0. 安裝virtualbox and vagrant [rootolx79vagrant ~]# cat /etc/resolv.conf #search 114.114.114.114 nameserver 180.76.76.76-- install VirtualBox yum install oraclelinux-developer-release-* wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7 -O /etc/pki/rpm-g…

【數據結構】空間復雜度

目錄 一、引入空間復雜度的原因 二、空間復雜度的分析 ? 2.1 程序運行時內存大小 ~ 程序本身大小 ? 2.2 程序運行時內存大小 ~ 算法運行時內存大小 ? 2.3 算法運行時內存大小 ? 2.4 不考慮算法全部運行空間的原因 三、空間復雜度 ? 3.1空間復雜度的定義 ? 3.2 空…

MySQL--》深度解析InnoDB引擎的存儲與事務機制

目錄 InnoDB架構 事務原理 MVCC InnoDB架構 從MySQL5.5版本開始默認使用InnoDB存儲引擎&#xff0c;它擅長進行事務處理&#xff0c;具有崩潰恢復的特性&#xff0c;在日常開發中使用非常廣泛&#xff0c;其邏輯存儲結構圖如下所示&#xff0c; 下面是InnoDB架構圖&#xf…