pytest基礎-new

規范

1、首先創建 py 文件命名以 test_ 開始或者以 _test 結尾

2、若是新建類,測試類需要以 Test_開頭

3、測試用例(方法)需要以 test_開頭

assert 斷言

assert xx:判斷 xx 為真

assert not xx:判斷 xx 不為真

assert a in b:判斷 b 包含 a

assert a == b:判斷 a 等于 b

assert a !=b:判斷 a 不等于 b

from calculator import add, subtractdef test_add():   #passassert add(2, 3) == 5
def test_subtract():  #passassert subtract(5, 3) != 1def test_zhen():#failassert 0 
def test_zhen2():#passassert 1def test_jia():#passassert not 0 
def test_jia1():#failassert not 1def test_include():#passassert 1 in [1,2,3]
def test_include2():#failassert 4 in [1,2,3]

執行

命令行執行:

  • pytest .\test_calculator.py 指定執行某文件

  • pytest 文件夾下所有test_* 或者*_test的文件,全部執行

  • pytest test_tt.py::Test::test_case1 pytest路徑/文件名::類名::方法名 執行指定文件指定方法

  • pytest test_tt.py::test_case1 pytest路徑/文件名::方法名

ide執行:

if __name__ == '__main__':

- pytest.main(['test_tt.py']) 指定文件, 指定執行某文件

- pytest.mian() 沒有指定文件,文件夾下所有test_* 或者*_test的文件,全部執行

- pytest.main(['test_tt.py::Test::test_case1']) 指定文件指定類指定方法

- pytest.main(['test_tt.py::test_case1']) 指定文件指定方法

命令行參數執行:

pytest -q 簡化控制臺的輸出

????????pytest -q test_calculator.py

pytest -v 輸出用例更加詳細的執行信息,比如用例所在文件和用例名稱

????????pytest -v test_calculator.py

pytest -k 執行用例中包含‘關鍵字’的用例 pytest -v -k "include" 方法名包含include的會被執行

????????pytest -k "include" test_calculator.py

pytest -s 輸出用例中的調試信息,比如 print 打印信息,如果不加參數則不輸出打印信息

????????pytest -s test_calculator.py

pytest -m 執行‘標記’的內容,執行特定的測試用例,執行有相同標記的測試用例

????????標記方法:方法前 @pytest.mark.run_these 打標run_these

????????執行 pytest -m run_these test_calculator.py test_calculator文件中的所有打標run_these的都會被執行

pytest -x執行失敗則停止執行,后面的用例不會被執行

????????pytest -x test_calculator.py 執行出fail就會break

pytest --maxfail=n執行失敗 n 次之后停止執行,n 是執行失敗的次數

????????pytest --maxfail=3 test_calculator.py 執行,當fail3次的時候,break

pytest --count=n 執行用例 n 次,n=2 就是執行兩次

????????pytest --count=2 test_calculator.py 執行2次

pytest --lf (last failed)重新運行上次失敗的用例,若沒有失敗的會全部跑

????????pytest --lf test_calculator.py 將上次失敗的again一遍,沒有失敗的就all again

pytest --ff (failed first)重新運行所有用例,但首先運行上次失敗的用例

????????pytest --ff test_calculator.py 所有全部執行一遍,上次失敗的優先執行

標記跳過執行

skipif(condition, reason=None) 參數:

condition:跳過的條件,必傳參數reason:標注原因,必傳參數

使用方法:

@pytest.mark.skipif(condition, reason="xxx") condition 條件為真時跳過

@pytest.mark.skip()

標記預期失敗

xfail(condition=None, reason=None, raises=None, run=True, strict=False)

常用參數:

condition:預期失敗的條件,必傳參數reason:失敗的原因,必傳參數

使用方法:

@pytest.mark.xfail(condition, reason="xx")condition 為真則標記失敗

在某種條件不滿足的時候, 預期它是失敗的, 就將它標記為預期失敗, 若condition 條件不滿足則正常執行

預期失敗:

  • 沒有條件,失敗就是xfailed

  • 有條件,條件滿足為真,失敗就是xfailed

  • 有條件,條件不滿足為假,失敗就是failed

參數化

方法:

parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

常用參數:

argnames:參數名

argvalues:參數對應值,類型必須為 list 當參數為一個時格式:[value]

當 參 數 個 數 大 于 一 個 時 , 格 式 為 : [(param_value1,param_value2.....),(param_value1,param_value2 )]

使用方法:

@pytest.mark.parametrize(argnames,argvalues) 參數名,參數值

@pytest.mark.parametrize("a",[3,6])單參數

@pytest.mark.parametrize("a,b",[(1,2),(0,3)])多參數

參數值為 N 個,測試方法就會運行 N 次

標記用例多次執行

首先安裝 repeat: pip install pytest-repeat

@pytest.mark.repeat(n)執行當前用例 n 次 然后再往下執行其他用例

標記用例執行順序

使用:

安 裝 pip install pytest-ordering

@pytest.mark.run(order=1)---第1個執行

@pytest.mark.run(order=2)---第2個執行

@pytest.mark.last---最后執行

fixtrue

自定義測試用例預置條件--pytest 精髓fixture

@pytest.fixture()(scope="function",params=None,autouse=False, ids=None, name=None)

調用時被優先執行 預處理或者重復操作scope:被標記方法的作用域

function(default):作用于每個測試方法,每個 test 都運行一次

class:每個 class類執行開始時執行一次 @pytest.fixture()(scope="class",autouse=True)

module:每個 module 的所有 test開始前只執行一次 @pytest.fixture()(scope="module",autouse=True)

session:多個.py 文件的用例的時候, 如果多個用例只需調用一次fixture,那就可以設置為 scope="session"。

params:(list 類型)提供參數數據,供調用標記方法的函數使用

autouse:是否自動運行,默認為 False 不運行,設置為 True 自動運行

若不為 True 則需要調用才會優先執行。

@pytest.fixture()

定義函數,命名不要以 test 開頭與用例區分開,fixture 有返回值, 沒有返回值默認為 None。用例調用 fixture 返回值,直接就是把 fixture 的函數名稱當做變量名稱。

生成測試報告

想要生成測試報告,需要先安裝 pytest-html

安裝命令: pip install pytest-html

  • 命令行生成:pytest --html==路徑/文件名.html 執行用例文件.py

    • pytest --html==./report_sample.html test_sample.py html報告

    • pytest --junit-xml==./report_sample.xml test_sample.py xml報告

  • 使用 PyCharm 生成報告

  • if name == "__main__": pytest.main('-s','-v','--html==./report_sample.html','test_samle.py')

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

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

相關文章

【華為OD機試真題】232、統計射擊比賽成績 | 機試真題+思路參考+代碼分析(C++)

題目描述 給定一個射擊比賽成績單,包含多個選手若干次射擊的成績分數,請對每個選手按其最高3個分數之和進行降序排名,輸出降序排 名后的選手ID序列 條件如下: 1.一個選手可以有多個射擊成績的分數,且次序不固定 2.如果一個選手成績少于3個,則認為選手的所有成績無效,排名…

?Unity 開發 | 如何通過 NTP 網絡時間實現精準的跨平臺時間同步【附完整源碼 + UI 模塊 + 偏差分析】

🎮 項目實戰 | 實現一套精確、可視化的游戲時間同步機制,讓你的多人在線游戲擺脫“時間不一致”噩夢! 效果如圖: 📌 一、前言:為什么不能只信本地時間? 在 Unity 游戲開發中,時間幾…

Vue3 Composition API與十大組件開發案例詳解

文章目錄 一、Vue3核心API解析1.1 Composition API優勢1.2 核心API 二、十大組件開發案例案例1:響應式表單組件案例2:動態模態框(Teleport應用)案例3:可復用列表組件案例4:全局狀態通知組件案例5&#xff1…

Kafka 詳細解讀

1. Producer(生產部卷王) 職責:往 Kafka 里瘋狂輸出數據,KPI 是「日拋式消息海嘯」 職場人設: 白天開會畫餅,深夜寫周報的奮斗逼,口頭禪是「這個需求今晚必須上線!」代碼里的「福報…

LicheeRV Nano 與Ubuntu官方risc-v 鏡像混合

LicheeRV Nano 官方給的鏡像并沒有unbutu, unbutu官方有一個基于 LicheeRV Dock的鏡像,想象能否將二者混合 (1)刷 LicheeRV Dock的鏡像 nano無法啟動 (2)將nano的boot分區替換掉 LicheeRV Dock的rootfs以外的分區也…

【模板匹配】圖像處理(OpenCV)-part10

19.1模板匹配 模板匹配就是用模板圖(通常是一個小圖)在目標圖像(通常是一個比模板圖大的圖片)中不斷的滑動比較,通過某種比較方法來判斷是否匹配成功,找到模板圖所在的位置。 不會有邊緣填充。 類似于卷積&#xff0c…

HTML:表格數據展示區

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>人員信息表</title><link rel"styl…

MySQL 的鎖,表級鎖是哪一層的鎖?行鎖是哪一層的鎖?

MySQL 的鎖層級與類型 在 MySQL 中&#xff0c;鎖的層級和實現與存儲引擎密切相關。 1. 表級鎖&#xff08;Table-Level Locks&#xff09; &#xff08;1&#xff09;存儲引擎層的表級鎖 實現層級&#xff1a;存儲引擎層&#xff08;如 MyISAM、InnoDB&#xff09;。特點&a…

阿里巴巴按圖搜索1688商品(拍立淘) API 返回值說明

阿里巴巴按圖搜索1688商品&#xff08;拍立淘&#xff09;API 返回值說明 阿里巴巴按圖搜索1688商品&#xff08;拍立淘&#xff09;API 的返回值通常以 JSON 格式返回&#xff0c;包含搜索結果、商品信息、分頁信息等。以下是具體的返回值說明&#xff1a; 1. 請求狀態信息 …

基于esp32-s3,寫一個實現json鍵值對數據創建和讀寫解析c例程

以下是一個基于 ESP32 - S3 使用 ESP - IDF 框架實現 JSON 鍵值對數據創建、讀寫和解析的 C 語言例程。 環境準備 確保你已經安裝了 ESP - IDF 開發環境&#xff0c;并且可以正常編譯和燒錄代碼到 ESP32 - S3 開發板。 代碼示例 #include <stdio.h> #include <stri…

MyBatis-Plus 使用 Wrapper 構建動態 SQL 有哪些優劣勢?

MyBatis-Plus (MP) 提供的 Wrapper (如 QueryWrapper, LambdaQueryWrapper, UpdateWrapper, LambdaUpdateWrapper) 是其核心特性之一&#xff0c;它允許我們在開發時以面向對象的方式構建 SQL 的 WHERE 條件、ORDER BY、SELECT 字段列表等部分。與傳統的 MyBatis 在 XML 文件中…

STM32與i.MX6ULL內存與存儲機制全解析:從微控制器到應用處理器的設計差異

最近做FreeRTos&#xff0c;以及前面設計的RVOS&#xff0c;這種RTOS級別的系統內存上的分布與CortexA系列里面的分布有相當大的區別&#xff0c;給我搞糊涂了。 目錄 STM32&#xff08;Cortex-M系列&#xff09;的內存與存儲機制 Flash存儲內容RAM存儲內容啟動與運行時流程示例…

Eteam 0.3版本開發規劃

Eteam 0.1系列經歷了3個小版本&#xff0c;主要完成了團隊資料庫功能。 Eteam 0.2系列經歷了22個小版本&#xff0c;主要完成了白板和AI交互的能力。 目前的問題 目前白板上的數據有兩個來源&#xff0c;團隊資料庫和外部數據。外部數據和團隊資料庫數據邊界不是很清晰。 0.3版…

HTML5好看的水果蔬菜在線商城網站源碼系列模板5

文章目錄 1.設計來源1.1 主界面1.2 關于我們1.3 商品服務1.4 果蔬展示1.5 聯系我們1.6 商品具體信息1.7 登錄注冊 2.效果和源碼2.1 動態效果2.2 源代碼 源碼下載萬套模板&#xff0c;程序開發&#xff0c;在線開發&#xff0c;在線溝通 作者&#xff1a;xcLeigh 文章地址&#…

深入理解Java包裝類:自動裝箱拆箱與緩存池機制

深入理解Java包裝類&#xff1a;自動裝箱拆箱與緩存池機制 對象包裝器 Java中的數據類型可以分為兩類&#xff1a;基本類型和引用類型。作為一門面向對象編程語言&#xff0c; 一切皆對象是Java語言的設計理念之一。但基本類型不是對象&#xff0c;無法直接參與面向對象操作&…

uniapp自定義拖拽排列

uniapp自定義拖拽排列并改變下標 <!-- 頁面模板 --> <template><view class"container"><view v-for"(item, index) in list" :key"item.id" class"drag-item" :style"{transform: translate(${activeInde…

基于SpringBoot的課程管理系統

前言 今天給大家分享一個基于SpringBoot的課程管理系統。 1 系統介紹 課程管理系統是一種專門為學校設計的軟件系統&#xff0c;旨在幫助學校高效地管理和組織各類課程信息。 該系統通常包括學生、教師和管理員三大角色。 他們可以通過系統進行選課、查看課程表、考試、進…

max31865典型電路

PT100讀取有很多種方案&#xff0c;常用的惠斯通電橋&#xff0c;和專用IC max31865 。 電阻溫度檢測器(RTD)是一種阻值隨溫度變化的電阻。鉑是最常見、精度最高的測溫金屬絲材料。鉑RTD稱為PT-RTD&#xff0c;鎳、銅和其它金屬亦可用來制造RTD。RTD具有較寬的測溫范圍&#x…

飛算 JavaAI 與 Spring Boot:如何實現微服務開發效率翻倍?

微服務架構憑借其高內聚、低耦合的特性&#xff0c;成為企業構建復雜應用系統的首選方案。然而&#xff0c;傳統微服務開發流程中&#xff0c;從服務拆分、接口設計到代碼編寫、調試部署&#xff0c;往往需要耗費大量時間與人力成本。Spring Boot 作為 Java 領域最受歡迎的微服…

(2)Docker 常用命令

文章目錄 Docker 服務器Docker 鏡像Docker 容器本地 RegistryRUN vs CMD vs ENTRYPOINTRUNCMDENTRYPOINT 限制容器對內存、CPU 和 IO 資源的使用內存CPUBlock IO設置權重bps 和 iops cgroup 和 namespacecgroupnamespacMount namespaceUTS namespaceIPC namespacePID namespace…