pytest自動化測試 - 構造“預置條件”的幾種方式

<< 返回目錄

1 pytest自動化測試 - 構造“預置條件”的幾種方式

1.1 使用夾具構造預置條件

??在夾具章節中,我們介紹了夾具的作用,其中一項就是構造預置條件。@pytest.fixture裝飾器中如果測試數據使用yield返回,則yield前的語句為預置條件語句。

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))

??夾具默認情況下是用例范圍生效,即夾具中的預置條件在每個用例都會執行。

1.2 在測試類中使用setup方法構造預置條件

??類中的setup函數用于構造預置條件,它在類的每個測試用例執行前都會執行一次。

import pytestclass TestExample:def setup_method(self):print("\n" + "=" * 65)print("預置條件")self.data = [4, 5, 6]def test_sum_in_class_001(self):print("第1個測試用例開始")assert sum(self.data) == 15print("第1個測試用例結束")def test_sum_in_class_002(self):print("第2個測試用例開始")assert 6 in self.dataprint("第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_setup_001.py 
=================================================================
預置條件
第1個測試用例開始
第1個測試用例結束
.
=================================================================
預置條件
第2個測試用例開始
第2個測試用例結束
.============================== 2 passed in 0.02s ==============================

1.3 在模塊中使用setup方法構造預置條件

??前一節介紹了如果在類中使用setup方法構造預置條件,現在介紹模塊中的setup方法,與類中的setup方法不同的是模塊中的setup函數名有講究,如下所示:

  • 每個用例都執行的預置條件:函數名固定使用def setup_function()
import pytestdata = [4, 5, 6]def setup_function():print("\n" + "=" * 65)print("預置條件")def test_sum_in_module_001():print("第1個測試用例開始")assert sum(data) == 15print("第1個測試用例結束")def test_sum_in_module_002():print("第2個測試用例開始")assert 6 in dataprint("第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_setup_002.py 
=================================================================
預置條件
第1個測試用例開始
第1個測試用例結束
.
=================================================================
預置條件
第2個測試用例開始
第2個測試用例結束
.============================== 2 passed in 0.01s ==============================

??從報文可以看到,每個用例執行前都執行了預置條件。

  • 模塊級的預置條件:即,本模塊中的第一個測試用例執行前執行一次,函數名固定使用``
import pytestdata = [4, 5, 6]def setup_module():print("\n" + "=" * 65)print("預置條件")def test_sum_in_module_001():print("第1個測試用例開始")assert sum(data) == 15print("第1個測試用例結束\n")def test_sum_in_module_002():print("第2個測試用例開始")assert 6 in dataprint("第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_setup_002.py 
=================================================================
預置條件
第1個測試用例開始
第1個測試用例結束.第2個測試用例開始
第2個測試用例結束
.============================== 2 passed in 0.01s ==============================

??從報文中可以看到,預置條件只執行了一次,第2個用例執行時便沒有執行。

🕮忠告
??雖然pytest提供了函數范圍、類范圍、模塊范圍等的預置條件構造方法,但從作者多年的測試工作經驗來看,每個測試用例單獨構造預置條件和后置條件是一種更合理的安排方式!否則極易出現用例執行依賴,極大增加測試用例的排錯工作量!

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

<< 返回目錄

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

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

相關文章

微信小程序date picker的一些說明

微信小程序的picker是一個功能強大的組件&#xff0c;它可以是一個普通選擇器&#xff0c;也可以是多項選擇器&#xff0c;也可以是時間、日期、省市區選擇器。 官方文檔在這里 這里講一下date picker的用法。 <view class"section"><view class"se…

[java] 面向對象進階篇1--黑馬程序員

目錄 static 靜態變量及其訪問 實例變量及其訪問 靜態方法及其訪問 實例方法及其訪問 總結 繼承 作用 定義格式 示例 總結 子類不能繼承的內容 繼承后的特點 成員變量 成員變量不重名 成員變量重名 super訪問父類成員變量 成員方法 成員方法不重名 成員方法…

python3+TensorFlow 2.x 基礎學習(一)

目錄 TensorFlow 2.x基礎 1、安裝 TensorFlow 2.x 2、TensorFlow 2.x 基礎概念 2、1 Eager Execution 2、2 TensorFlow 張量&#xff08;Tensor&#xff09; 3、使用Keras構建神經網絡模型 3、1 構建 Sequential 模型 3、2 編譯模型 1、Optimizer&#xff08;優化器&a…

AI News(1/21/2025):OpenAI 安全疏忽:ChatGPT漏洞引發DDoS風險/OpenAI 代理工具即將發布

1、OpenAI 的安全疏忽&#xff1a;ChatGPT API 漏洞引發DDoS風險 德國安全研究員 Benjamin Flesch 發現了一個嚴重的安全漏洞&#xff1a;攻擊者可以通過向 ChatGPT API 發送一個 HTTP 請求&#xff0c;利用 ChatGPT 的爬蟲對目標網站發起 DDoS 攻擊。該漏洞源于 OpenAI 在處理…

openlava/LSF 用戶組管理腳本

背景 在openlava運維中經常需要自動化一些常規操作&#xff0c;比如增加用戶組以及組成員、刪除用戶組成員、刪除用戶組等。而openlava的配置文件需要手動修改&#xff0c;然后再通過badmin reconfig激活配置。因此開發腳本將手工操作自動化就很有必要。 通過將腳本中的User…

LLMs的星辰大海:大語言模型的前世今生

文章目錄 一. LLM 的演進&#xff1a;從規則到智能的躍遷 &#x1f4ab;1.1 語言模型的蹣跚起步 &#x1f476;1.2 RNN 與 LSTM&#xff1a;序列建模的嘗試 &#x1f9d0;1.3 Transformer 的橫空出世&#xff1a;自注意力機制的革命 &#x1f4a5;1.4 LLM &#xff1a;從預測到…

7-Zip高危漏洞CVE-2025-0411:解析與修復

7-Zip高危漏洞CVE-2025-0411&#xff1a;解析與修復 免責聲明 本系列工具僅供安全專業人員進行已授權環境使用&#xff0c;此工具所提供的功能只為網絡安全人員對自己所負責的網站、服務器等&#xff08;包括但不限于&#xff09;進行檢測或維護參考&#xff0c;未經授權請勿利…

數據結構(精講)----樹(應用篇)

特性&#xff1a; 什么是樹&#xff1a; 樹(Tree)是(n>0)個節點的有限集合T&#xff0c;它滿足兩個條件&#xff1a; (1) 有且僅有一個特定的稱為根&#xff08;Root&#xff09;的節點。 (2) 其余的節點可以分為m&#xff08;m≥0&#xff09;個互不相交的有限集合T1、…

【動態規劃】--- 斐波那契數模型

Welcome to 9ilks Code World (??? ? ???) 個人主頁: 9ilk (??? ? ???) 文章專欄&#xff1a; 算法Journey &#x1f3e0; 第N個泰波那契數模型 &#x1f4cc; 題目解析 第N個泰波那契數 題目要求的是泰波那契數&#xff0c;并非斐波那契數。 &…

如何確保Spring單例Bean在高并發環境下的安全性?

在Spring中&#xff0c;單例Bean就像是一個“公共的水杯”&#xff0c;整個應用程序中的所有線程都會共享這一個實例。在大部分情況下&#xff0c;這沒什么問題&#xff0c;但如果多個線程同時想要修改這個“水杯”里的內容&#xff0c;就可能會出現問題了。 想象一下&#xff…

期刊審稿意見回復的LaTeX模板分享

下載網址 https://github.com/NeuroDong/Latex_for_review_comments 效果展示 分享內容 在學術寫作過程中&#xff0c;回復審稿意見是一個重要且繁瑣的環節。由于審稿人眾多&#xff0c;使用Word進行排版往往效率低下。為了提高效率&#xff0c;我在網上找到了一個LaTeX模板…

Vue 3 30天精進之旅:Day 03 - Vue實例

引言 在前兩天的學習中&#xff0c;我們成功搭建了Vue.js的開發環境&#xff0c;并創建了我們的第一個Vue項目。今天&#xff0c;我們將深入了解Vue的核心概念之一——Vue實例。通過學習Vue實例&#xff0c;你將理解Vue的基礎架構&#xff0c;掌握數據綁定、模板語法和指令的使…

在Vue中,<img> 標簽的 src 值

1. 直接指定 src 的值&#xff08;適用于網絡圖片&#xff09; 如果你使用的是網絡圖片&#xff08;即圖片的URL是完整的HTTP或HTTPS鏈接&#xff09;&#xff0c;可以直接指定 src 的值&#xff1a; vue 復制 <template><div><img src"https://exampl…

Spring Boot/MVC

一、Spring Boot的創建 1.Spring Boot簡化Spring程序的開發,使用注解和配置的方式開發 springboot內置了tomact服務器 tomact:web服務器,默認端口號8080,所以訪問程序使用8080 src/main/java:Java源代碼 src/main/resource:靜態資源或配置文件,存放前端代碼(js,css,html) s…

Spring--SpringMVC的調用流程

一.簡介 1.1主要作用 SSM框架構建起單的技術棧需求&#xff01;其中的SpringMVC負責表述層&#xff08;控制層&#xff09;實現簡化&#xff01; 最終總結&#xff1a; 1. 簡化前端參數接收( 形參列表 )2. 端數據響應(返回值)1.2核心組件和調用流程 Spring MVC與許多其他Web…

C#集合排序的三種方法(List<T>.Sort、LINQ 的 OrderBy、IComparable<T> 接口)

見過不少人、經過不少事、也吃過不少苦&#xff0c;感悟世事無常、人心多變&#xff0c;靠著回憶將往事串珠成鏈&#xff0c;聊聊感情、談談發展&#xff0c;我慢慢寫、你一點一點看...... 1、使用 List<T>.Sort 方法與自定義比較器 public class Person{public string …

從ChatGPT熱潮看智算崛起

2025年1月7日&#xff0c;科智咨詢發布《2025年IDC產業七大發展趨勢》&#xff0c;其中提到“ChatGPT開啟生成式AI熱潮&#xff0c;智能算力需求暴漲&#xff0c;算力供給結構發生轉變”。 【圖片來源于網絡&#xff0c;侵刪】 為何會以ChatGPT發布為節點呢&#xff1f;咱們一起…

Frida使用指南(三)- Frida-Native-Hook

1.Process、Module、Memory基礎 1.Process Process 對象代表當前被Hook的進程,能獲取進程的信息,枚舉模塊,枚舉范圍等 2.Module Module 對象代表一個加載到進程的模塊(例如,在 Windows 上的 DLL,或在 Linux/Android 上的 .so 文件), 能查詢模塊的信息,如模塊的基址、名…

Electron學習筆記,安裝環境(1)

1、支持win7的Electron 的版本是18&#xff0c;這里node.js用的是14版本&#xff08;node-v14.21.3-x86.msi&#xff09;云盤有安裝包 Electron 18.x (截至2023年仍在維護中): Chromium: 96 Node.js: 14.17.0 2、安裝node環境&#xff0c;node-v14.21.3-x86.msi雙擊運行選擇安…

漏洞修復:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)

文章目錄 引言I Apache Tomcat 安全漏洞(CVE-2024-50379)漏洞描述修復建議升級Tomcat教程II Apache Tomcat 安全漏洞(CVE-2024-52318)漏洞描述修復建議III 安全警告引言 解決方案:升級到最新版Tomcat https://blog.csdn.net/z929118967/article/details/142934649 service in…