Pytest-mark使用詳解(跳過、標記、參數 化)

1.前言

在工作中我們經常使用@pytest.mark.XXXX進行裝飾器修飾,后面的XXX的不同,在pytest中有不同的作

用,其整體使用相對復雜,我們單獨將其抽取出來做詳細的講解。

2.@pytest.mark.skip()/skipif()跳過用例

import pytest
#無條件跳過:@pytest.mark.skip 或者@pytest.mark.skip(reason='XXXXXX');狀態為:
SKIPPED
@pytest.mark.skip()
def test_001():
print('test_001:無條件跳過')
#不滿足條件就不跳過,正常執行,通過為passed,不通過為failed
@pytest.mark.skipif(1==2,reason='條件成立的時候跳過,不成立的時候不跳過')
def test_002():
print('test_002:條件不成立不跳過')
#滿足條件就就跳過,并給出跳過的原因:狀態為SKIPPED
@pytest.mark.skipif(1==1,reason='條件成立的時候跳過,不成立的時候不跳過')
def test_003():
print('test_003:條件成立,跳過')

3.xfail標記用例結果

當由于確切的原因,我們指定某個用例執行會失敗,如:用例覆蓋的功能還未完成、用例測試時被阻塞

等時,可以使用xfail將用例標記起來。

3.1 xfail的裝飾器用法

3.1.1 @pytest.mark.xfail不帶參數用法

import pytest
'''
使用@pytest.mark.xfail標記用例,表示期望這個用例執行失敗。
標記后的用例會正常執行,只是失敗時不再顯示堆棧信息,最終的結果有兩個:
用例執行失敗時(XFAIL:符合預期的失敗)、用例執行成功時(XPASS:不符合預期的成功)
'''
#通過狀態為Xpass:表示不符合預期的成功
@pytest.mark.xfail
def test_004():
assert 1==1
#不通過狀態為Xfail:表示符合預期的失敗
@pytest.mark.xfail
def test_005():
assert 1==2

3.1.2 @pytest.mark.xfail()帶參數用法

import pytest
'''
pytest.mark.xfail(condition=None, reason=None, strict=False, raises=None,
run=True)
condition位置參數,默認值為None,表示只有滿足條件時才標記用例,不滿足條件不標記用例
reason關鍵字參數,默認值為None,表示可以指定一個reason字符串,說明標記用例的原因;
strict關鍵字參數,默認值為False:
當strict=False時,如果用例執行失敗,結果標記為XFAIL,表示符合預期的失敗;如果用例執行成功,結
果標記為XPASS,表示不符合預期的成功;
當strict=True時,無論用例是否執行成功,結果都將標記為FAILED;
raises關鍵字參數,默認值為None:
可以指定為一個異常類或者多個異常類的元組,表示我們期望用例上報指定的異常;
如果用例的失敗不是因為所期望的異常導致的,pytest將會把測試結果標記為FAILED;
run關鍵字參數,默認值為True:
當run=False時,pytest不會再執行測試用例,直接將結果標記為XFAIL;
'''
@pytest.mark.xfail(condition=1==2,reason='條件不成立,用例不會被標記')
def test_004():
assert 1==1 #條件不成立,用例不會被標記,test_004正常執行,成功passed
@pytest.mark.xfail(condition=1==2,reason='條件不成立,用例不會被標記')
def test_005():
assert 1!=1 #條件不成立,用例不會被標記,test_005正常執行,失敗failed
@pytest.mark.xfail(condition=1!=2,reason='條件成立,用例被標記')
def test_006():
assert 1==1 #條件成立,用例被標記,執行成功狀態標記為XPASS
@pytest.mark.xfail(condition=1!=2,reason='條件成立,用例被標記')
def test_007():
assert 1==2 #條件成立,用例被標記,執行失敗狀態標記為XFAIL
@pytest.mark.xfail(condition=1!=2,reason='條件成立,用例被標記',strict=True)
def test_008():
print('strict=True,無論用例執行成功還是失敗,狀態均標記為failed')
#assert 1==1
#assert 1==2
@pytest.mark.xfail(condition=1!=2,reason='條件成立,用例被標記',strict=True,raises=
(ZeroDivisionError,))
def test_009():
print(1/0) #用例執行失敗,導致失敗的原因為期望的異常導致,用例結果標記為XFAIL
assert 1 == 1 #用例執行成功,直接標記為Failed
# assert 1 != 1 #用例執行失敗,導致失敗的原因不為期望的異常導致,用例結果標記為Failed
@pytest.mark.xfail(condition=1!=2,reason='條件成立,用例被標記',strict=True,raises=
(ZeroDivisionError,),run=False)
def test_010():
print('run=False,不允許用例,直接標記用例為XFAIL')
print(1/0)

3.2 xfail的非裝飾器用法

可以通過pytest.xfail方法在用例執行過程中直接標記用例結果為XFAIL,并跳過剩余的部分

4.@pytest.mark.標記

關于執行被標記的用例,這個在上一講,已經講過,這里不再累述

5.@pytest.mark.parametrize()進行參數化

import pytest
import yaml
#傳遞多個參數,多個參數,多個參數名稱寫入一個字符串,值寫入一個容器,容器內分別為對應參數的值
@pytest.mark.parametrize('a,b',[(1,2),(3,4)])
def test_001(a,b):
print(a,b)
#傳遞一個參數,這個參數的多組值寫入一個容器
@pytest.mark.parametrize('kwargs',[{'k':'v1'},{'k':'v2'}])
def test_002(kwargs):
print(kwargs['k'])
#yaml文件傳值,這種方式需要主要文件路徑的變化,如果有問題,可以寫文件的絕對路徑,一般結合
fixture使用好點
@pytest.mark.parametrize('kwargs',
yaml.safe_load(open('../data/login.yaml','r',encoding='utf-8')))
def test_003(kwargs):
print(kwargs)
if __name__ == '__main__':
pytest.main()

?執行結果如下:

?

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

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

相關文章

基于 Spring Boot 的井字棋游戲開發與實現

目錄 引言 項目概述 項目搭建 1. 環境準備 2. 創建 Spring Boot 項目 3. 項目結構 代碼實現 1. DemoApplication.java 2. TicTacToeController.java 3. pom.xml 電腦落子策略 - Minimax 算法 findBestMove 方法 minimax 方法 運行游戲 總結 引言 在軟件開發領域&…

【算法筆記】貪心算法

一、什么是貪心算法? 貪心算法是一種在每一步選擇中都采取當前看起來最優(最“貪心”)的策略,從而希望得到全局最優解的算法設計思想。 核心思想:每一步都做出局部最優選擇,不回退。適用場景:…

現代c++獲取linux所有的網絡接口名稱

現代c獲取linux所有的網絡接口名稱 前言一、在linux中查看網絡接口名稱二、使用c代碼獲取三、驗證四、完整代碼如下五、總結 前言 本文介紹一種使用c獲取本地所有網絡接口名稱的方法。 一、在linux中查看網絡接口名稱 在linux系統中可以使用ifconfig -a命令列舉出本機所有網絡…

打印及判斷回文數組、打印N階數組、蛇形矩陣

打印回文數組 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1方法1: 對角線對稱 左上和右下是對稱的。 所以先考慮左上打印, m i n ( i 1 , j 1 ) \text min(i1,j1) min(i1,j1),打印出來: 1 1 1 1 1 2 2 2 1 2 3 3 1 2 …

詳解UnityWebRequest類

什么是UnityWebRequest類 UnityWebRequest 是 Unity 引擎中用于處理網絡請求的一個強大類,它可以讓你在 Unity 項目里方便地與網絡資源進行交互,像發送 HTTP 請求、下載文件等操作都能實現。下面會詳細介紹 UnityWebRequest 的相關內容。 UnityWebRequ…

UE5 在旋轉A的基礎上執行旋轉B

用徑向slider實現模型旋轉時,得到的結果與ue編輯器里面的結果有很大出入。 問題應該是 兩個FRotator(0,10,0)和(10,20,30), 兩個FRotator的加法結果為&…

4.2 Prompt工程與任務建模:高效提示詞設計與任務拆解方法

提示詞工程(Prompt Engineering)和任務建模(Task Modeling)已成為構建高效智能代理(Agent)系統的核心技術。提示詞工程通過精心設計的自然語言提示詞(Prompts),引導大型語…

MySQL 索引的最左前綴匹配原則是什么?

MySQL 索引的最左前綴匹配原則詳解 最左前綴匹配原則(Leftmost Prefix Principle)是 MySQL 復合索引(聯合索引)查詢優化中的核心規則,理解這一原則對于高效使用索引至關重要。 核心概念 定義:當查詢條件…

SQL命令

一、控制臺中查詢命令 默認端口號:3306 查看服務器版本: mysql –version 啟動MySQL服務:net start mysql 登錄數據庫:mysql -u root -p 查看當前系統下的數據庫:show databases; 創建數據庫:create…

新增 29 個專業,科技成為關鍵賽道!

近日,教育部正式發布《普通高等學校本科專業目錄(2025年)》,新增 29 個本科專業,包括區域國別學、碳中和科學與工程、海洋科學與技術、健康與醫療保障、智能分子工程、醫療器械與裝備工程、時空信息工程、國際郵輪管理…

零基礎上手Python數據分析 (23):NumPy 數值計算基礎 - 數據分析的加速“引擎”

寫在前面 —— 超越原生 Python 列表,解鎖高性能數值計算,深入理解 Pandas 的底層依賴 在前面一系列關于 Pandas 的學習中,我們已經領略了其在數據處理和分析方面的強大威力。我們學會了使用 DataFrame 和 Series 來高效地操作表格數據。但是,你是否好奇,Pandas 為何能夠…

Android 13.0 MTK Camera2 設置默認拍照尺寸功能實現

Android 13.0 MTK Camera2 設置默認拍照尺寸功能實現 文章目錄 需求:參考資料架構圖了解Camera相關專欄零散知識了解部分相機源碼參考,學習API使用,梳理流程,偏應用層Camera2 系統相關 修改文件-修改方案修改文件:修改…

HarmonyOS 框架基礎知識

參考文檔:HarmonyOS開發者文檔 第三方庫:OpenHarmony三方庫中心倉 基礎特性 Entry:關鍵裝飾器 Components:組件 特性EntryComponent??作用范圍僅用于頁面入口可定義任意可復用組件??數量限制??每個頁面有且僅有一個無數量…

前端分頁與瀑布流最佳實踐筆記 - React Antd 版

前端分頁與瀑布流最佳實踐筆記 - React Antd 版 1. 分頁與瀑布流對比 分頁(Pagination)瀑布流(Infinite Scroll)展示方式按頁分批加載,有明確頁碼控件滾動到底部時自動加載更多內容,無明顯分頁用戶控制用…

Linux網絡編程:TCP多進程/多線程并發服務器詳解

Linux網絡編程:TCP多進程/多線程并發服務器詳解 TCP并發服務器概述 在Linux網絡編程中,TCP服務器主要有三種并發模型: 多進程模型:為每個客戶端連接創建新進程多線程模型:為每個客戶端連接創建新線程I/O多路復用&am…

詳解springcloudalibaba采用prometheus+grafana實現服務監控

文章目錄 1.官網下載安裝 prometheus和grafana1.promethus2.grafana 2. 搭建springcloudalibaba集成prometheus、grafana1. 引入依賴,springboot3.2之后引入如下2. 在yml文件配置監控端點暴露配置3. 在當前啟動的應用代碼中添加,在prometheus顯示的時候附加當前應用…

數據分析1

一、常用數據處理模塊Numpy Numpy常用于高性能計算,在機器學習常常作為傳遞數據的容器。提供了兩種基本對象:ndarray、ufunc。 ndarray具有矢量算術運算和復雜廣播能力的快速且節省空間的多維數組。 ufunc提供了對數組快速運算的標準數學函數。 ndar…

DeepSeek智能時空數據分析(六):大模型NL2SQL繪制城市之間連線

序言:時空數據分析很有用,但是GIS/時空數據庫技術門檻太高 時空數據分析在優化業務運營中至關重要,然而,三大挑戰仍制約其發展:技術門檻高,需融合GIS理論、SQL開發與時空數據庫等多領域知識;空…

2023ICPC合肥題解

文章目錄 F. Colorful Balloons(簽到)E. Matrix Distances(思維小結論)J. Takeout Delivering(最短路)G. Streak Manipulation(二分dp)C. Cyclic Substrings(回文自動機) 題目鏈接 F. Colorful Balloons(簽到) int n;cin>>n;for(int i1;i<n;i) cin>>s[i];map<…

數字技術驅動下教育生態重構:從信息化整合到數字化轉型的路徑探究

一、引言 &#xff08;一&#xff09;研究背景與問題提出 在當今時代&#xff0c;數字技術正以前所未有的速度和深度滲透到社會的各個領域&#xff0c;教育領域也不例外。從早期的教育信息化整合到如今的數字化轉型&#xff0c;教育系統正經歷著一場深刻的范式變革。 回顧教…