【測試框架篇】單元測試框架pytest(4):assert斷言詳解

一、前言

用例三要素之一就是對預期結果的斷言。

何為斷言?簡單來說就是實際結果和期望結果去對比,符合預期就測試pass,不符合預期那就測試 failed。斷言內容就是你要的預期結果。斷言包含對接口響應內容做斷言、也包含對落DB的數據做斷言。

pytest可以讓開發者使用Python斷言來驗證測試中的期望值。

話不多說,我們來舉個小例子熟悉一下,一般我們會在拋出異常之后輸出一些提示信息,執行之后就方便查看是什么原因了。

# 異常信息
def f():return 3
def test_function():a = f()assert a % 2 == 0, "判斷 a 為偶數,當前 a 的值為:%s" % a

執行結果

二、常用斷言

pytest 里面斷言實際上就是 python 里面的 assert 斷言方法,常用的有以下幾種

  • assert xx :判斷 xx 為真
  • assert not xx :判斷 xx 不為真
  • assert a in b :判斷 b 包含 a
  • assert a == b :判斷 a 等于 b
  • assert a != b :判斷 a 不等于 b

三、異常斷言

可以使用 pytest.raises 作為上下文管理器,當拋出異常時可以獲取到對應的異常實例

# 斷言異常
def test_zero_division():with pytest.raises(ZeroDivisionError):1 / 0

斷言場景:斷言它拋的異常是不是預期想要的

代碼執行:1/0

預期結果:拋的異常是ZeroDivisionError: division by zero

如何斷言:通常是斷言異常的 type 和 value 值了

具體方式:這里?1/0 的異常類型是 ZeroDivisionError,異常的 value 值是 divisionby zero

#詳細斷言異常
def test_zero_division_long():with pytest.raises(ZeroDivisionError) as excinfo:1 / 0# 斷言異常類型 typeassert excinfo.type == ZeroDivisionError# 斷言異常 value 值assert "division by zero" in str(excinfo.value)

excinfo?:是一個異常信息實例

主要屬性:?.type?、??.value?、?.traceback?

注意:斷言 type 的時候,異常類型是不需要加引號的,斷言 value值的時候需轉 str

拓展一:match

可以將?match?關鍵字參數傳遞給上下文管理器,以測試正則表達式與異常的字符串表示形式是否匹配

注意:這種方法只能斷言value,不能斷言type

# 自定義消息
def test_zero_division_long():with pytest.raises(ZeroDivisionError, match=".*zero.*") as excinfo:1 / 0

該?match?方法的regexp參數與?re.search??函數匹配,因此在上面的示例中?match='zero'?也可以使用

拓展二:檢查斷言裝飾器

# 斷言裝飾器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():1 / 0

執行結果

知識點

  • 代碼拋出異常,但是和raises指定的異常類相匹配,所以不會斷言失敗
  • 它相當于一個檢查異常裝飾器,功能:檢查是否有異常,不確定是否有異常
  • with pytest.raise(ZeroDivisionError)??對于故意測試異常代碼的情況,使用可能會更好
  • 而@pytest.mark.xfail(raises=ZeroDivisionError)?對于檢查未修復的錯誤(即,可能會發生異常),使用檢查斷言可能會更好

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

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

相關文章

什么是大模型微調?

在大模型(如GPT、BERT、LLaMA等)廣泛應用的今天,“微調”(Fine-Tuning)已成為釋放模型潛力的關鍵技術。它通過針對特定任務調整預訓練模型,使其從“通才”變為“專才”。本文將從概念、原理到實踐&#xff…

C# Channel

核心概念創建Channel無界通道有界通道FullMode選項 生產者-消費者模式生產者寫入數據消費者讀取數據 完整示例高級配置優化選項:取消操作:通過 CancellationToken 取消讀寫。 錯誤處理適用場景Channel的類型創建Channel寫入和讀取消息使用場景示例代碼注…

基于Spring Boot的牙科診所管理系統的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

upload-labs-靶場(1-19關)通關攻略

文件上傳漏洞是指由于程序員再開發時,未對用戶上傳的文件進行嚴格的驗證和過濾,而導致用戶可以上傳可執行的動態腳本文件 Pass-01(前端驗證繞過) 上傳111.php文件,發現彈窗顯示不允許,并給出白名單文件類…

使用 pytesseract 進行 OCR 識別:以固定區域經緯度提取為例

引言 在智能交通、地圖定位等應用場景中,經常會遇到需要從圖像中提取經緯度信息的需求。本篇文章將介紹如何利用 Python 的 pytesseract 庫結合 PIL 對圖像進行預處理,通過固定區域裁剪,來有效地識別出圖像上顯示的經緯度信息。 1. OCR 與 …

docker安裝和卸載

服務器系統:Ubuntu Server 18.04.2 64bit 1 安裝docker: 1.1 在線安裝 1.# yum install docker 1.2 離線安裝 https://download.csdn.net/download/qq_27106141/90477700 1.# docker-18.03.1-ce.tgz 1.2.1 解壓 tar -xzvf docker-18.03.1-ce.tgz 1.2.2…

機器人交互系統 部署構建

環境要求 Ubuntu 20.04 或更高版本ROS Noetic 或兼容版本Python 3.8 安裝步驟 1. 安裝ROS環境(如未安裝) sudo apt update sudo apt install ros-noetic-desktop-full source /opt/ros/noetic/setup.bash2. 創建工作空間并克隆代碼 mkdir -p ~/code…

【Go每日一練】構建一個簡單的用戶信息管理系統

👻創作者:丶重明 👻創作時間:2025年3月7日 👻擅長領域:運維 目錄 1.😶?🌫?題目:簡單的用戶信息管理系統2.😶?🌫?代碼開發3.😶?&a…

全員DeepSeek時代,前端能做些什么?

全員DeepSeek時代,前端能做些什么? 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,可以分享一下給大家。點擊跳轉到網站。 https://www.captainbed.cn/ccc #mermaid-svg-VNyL95jkz9jEXgUq {font-family:&…

Machine Learning: 十大基本機器學習算法

機器學習算法分類:監督學習、無監督學習、強化學習 基本的機器學習算法: 線性回歸、支持向量機(SVM)、最近鄰居(KNN)、邏輯回歸、決策樹、k平均、隨機森林、樸素貝葉斯、降維、梯度增強。 機器學習算法大致可以分為三類: 監督學習算法 (Sup…

【Linux docker 容器】關于想要讓虛擬機在開機時候也docker自己啟動,容器也自己啟動,省去要自己開docker和容器

確認 Docker 服務狀態: 首先,你需要確保 Docker 服務已經在虛擬機上安裝并正確配置。你可以使用如下命令來檢查 Docker 服務的狀態: systemctl status docker.service 如果服務沒有運行,你可以使用以下命令啟動它: s…

前端系統測試(單元、集成、數據|性能|回歸)

有關前端測試的面試題 系統測試 首先,功能測試部分。根據資料,單元測試是驗證最小可測試單元的正確性,比如函數或組件。都提到了單元測試的重要性,強調其在開發早期發現問題,并通過自動化提高效率。需要整合我搜索到的資料中的觀點,比如單元測試的方法(接口測試、路徑覆…

linux 命令 ls

ls 是 Linux 系統中用于列出目錄內容的核心命令,幾乎所有日常操作都會用到。以下是其詳細用法和常見場景說明 1. 基礎語法 ls [選項] [目錄/文件] 不指定目錄時,默認列出當前目錄的內容。 可以指定文件或目錄路徑,支持通配符(如…

CI/CD—GitLab部署

GitLab簡介: GitLab 是一個用于代碼托管和軟件開發協作的平臺,在全球開發者社區及企業中應用廣泛,以下是對它的詳細介紹: 主要功能 代碼托管:提供了基于 Git 的代碼倉庫管理功能,支持創建、克隆、推送、…

ubuntu軟件

視頻軟件,大部分的編碼都能適應 sudo apt install vlc圖片軟件 sudo apt install gwenview截圖軟件 sudo apt install flameshot設置快捷鍵 flameshot flameshot gui -p /home/cyun/Pictures/flameshot也就是把它保存到一個自定義的路徑 菜單更換 sudo apt r…

Easysearch 使用 AWS S3 進行快照備份與還原:完整指南及常見錯誤排查

Easysearch 可以使用 AWS S3 作為遠程存儲庫,進行索引的快照(Snapshot)備份和恢復。同時,Easysearch 內置了 S3 插件,無需額外安裝。以下是完整的配置和操作步驟。 1. 在 AWS S3 上創建存儲桶 登錄 AWS 控制臺&#x…

【系統架構設計師】性能評估

目錄 1. 說明2. 基準測試程序3. Web服務器的性能評估4. 系統監視5. 例題5.1 例題1 1. 說明 1.性能評估是為了一個目的,按照一定的步驟,選用一定的度量項目,通過建模和實現,對一個系統的性能進行各項檢測,對測試結果做…

動態規劃-第2篇

前言:在上一篇文章中,我們了解了動態規劃的基本概念和解決問題的基本思路。通過分解問題、存儲子問題的解,動態規劃為我們提供了高效的解決方案。然而,動態規劃并不是一成不變的,它有很多不同的技巧和變種,…

基于Redis實現限流

限流盡可能在滿足需求的情況下越簡單越好! 1、基于Redsi的increment方法實現固定窗口限流 Redis的increment方法保證并發線程安全窗口盡可能越小越好(太大可能某一小段時間就打滿請求剩下的都拿不到令牌了)這個原理其實就是用當前時間戳然后除窗口大小 在這個窗口大…

【工具使用】IDEA 社區版如何創建 Spring Boot 項目(詳細教程)

IDEA 社區版如何創建 Spring Boot 項目(詳細教程) Spring Boot 以其簡潔、高效的特性,成為 Java 開發的主流框架之一。雖然 IntelliJ IDEA 專業版提供了Spring Boot 項目向導,但 社區版(Community Edition&#xff09…