(2)pytest執行用例的規則

1. 簡介

今天主要學習一下pytest的執行用例的規則。

2. 通過help幫助查看pytest如何使用

.查看pytest命令行參數,可以用pytest -h 或pytest --help查看

3. 用例設計原則

  • 文件名以test_*.py文件和*_test.py
  • 以test_開頭的函數
  • 以Test開頭的類
  • 以test_開頭的方法
  • 所有的包pakege必須要有__init__.py文件

4.開始用例設計

4.1 用例設計目錄

為了不必要的麻煩,請按照我的目錄設計和寫測試用例

4.2?test_class.py參考代碼

# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
#  content of  test_class.py
class TestClass:def test_one(self):x = "this"assert 'h' in xdef test_two(self):x = "hello"assert hasattr(x, 'check')def test_three(self):a = "hello"b = "hello world"assert a in b

4.3?test_sample.py參考代碼

# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊#  content of  test_sample.py
def func(x):return x + 1def test_answer():assert func(3) == 5

5. 執行方式

 cmd執行pytest用例有三種方法,以下三種方法都可以,一般推薦第一個。簡單、好記、好寫。

pytest
py.test
python -m pytest

如果不帶參數,在某個文件夾下執行時,它會查找該文件夾下所有的符合條件的用例(查看用例設計原則)

6. 執行規則

1.執行某個目錄下所有的用例

pytest 文件名/

2.執行某一個py文件下用例

pytest 腳本名稱.py

3.-k 按關鍵字匹配

pytest -k “MyClass and not method”

?這將運行包含與給定字符串表達式匹配的名稱的測試,其中包括Python使用文件名,類名和函數名作為變量的運算符。 上面的例子將運行TestMyClass.test_something但不運行TestMyClass.test_method_simple

4.按節點運行

每個收集的測試都分配了一個唯一的nodeid,它由模塊文件名和后跟說明符組成來自參數化的類名,函數名和參數,由:: characters分隔。
運行.py模塊里面的某個函數

pytest test_mod.py::test_func

運行.py模塊里面,測試類里面的某個方法

pytest test_mod.py::TestClass::test_method

5.標記表達式

pytest -m slow

將運行用@ pytest.mark.slow裝飾器修飾的所有測試。
6.從包里面運行

pytest —pyargs pkg.testing

這將導入pkg.testing并使用其文件系統位置來查找和運行測試。

7.pytest -x( 遇到錯誤時停止測試)

pytest -x test_class.py

從運行結果可以看出,本來有3個用例,第二個用例失敗后就沒繼續往下執行了

8.pytest -maxfail=num(當用例錯誤個數達到指定數量時,停止測試)

pytest --maxfail=1

7. pycharm配置pytest

以pytest方式運行,需要改該工程設置默認的運行器:file->Setting->Tools->Python Integrated Tools->項目名稱->Default test runner->選擇pytest

8. pycharm運行三種方式

上邊已經介紹了如何在cmd執行pytest用例,平常我們寫代碼在pycharm比較多,寫完用例之后,需要調試看看,是不是能正常運行,如果每次跑去cmd執行,太麻煩,所以很有必要學習如何在pycharm里面運行pytest用例

8.1xx.py腳本方式直接執行

1.以xx.py腳本方式直接執行,當寫的代碼里面沒用到unittest和pytest框架時,并且腳本名稱不是以test_開頭命名的,此時pycharm會以xx.py腳本方式運行

?2.參考代碼

# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
def hello():print("hello world !")if __name__=="__main__":hello()

8.2?以unittest方式運行

  1.當腳本命名為test_xx.py時,用到unittest框架,此時運行代碼,pycharm會自動識別到以unittest方式運行

8.3?pytest方式運行

以pytest方式運行,需要改該工程設置默認的運行器:file->Setting->Tools->Python Integrated Tools->項目名稱->Default test runner->選擇pytest

備注:pytest是可以兼容unittest框架代碼的

9. 趁熱打鐵-pycharm寫pytest代碼

在pycharm里面寫pytest用例,先導入pytest

9.1 代碼實現:

9.2 參考代碼:

# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
#  content of  test.py
import pytestclass TestClass:def test_one(self):x = "this"assert 'h' in xdef test_two(self):x = "hello"assert hasattr(x, 'check')def test_three(self):a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main('-q test.py')

9.3 運行結果:

 1.運行代碼后,控制臺打印如下圖的結果

2.運行結果“.F. ” 點是代表測試通過,F是Fail的意思,1 warnings是用于pytest.main('-q test_class.py')里面參數需要傳list,多個參數放list就不會有警告了

pytest.main(['-q', 'test.py')

10. pycharm設置pytest

  1.新建一個工程后,左上角file->Setting->Tools->Python Integrated Tools->項目名稱->Default test runner->選擇pytest

2.改完之后,再重新建個腳本(注意是先改項目運行方式,再寫代碼才能出來),接下來右鍵運行就能出來pytest運行了

3.pytest是可以兼容unittest腳本的,之前寫的unittest用例也能用pytest框架去運行

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

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

相關文章

InnoDB數據頁

導讀: 我們已經知道了頁是數據庫存儲的基本單位,知道了一條行記錄的存儲格式是怎樣的,當數據越來越多時,那一條條行記錄具體又是怎么在頁中被組織起來的呢? 一、InnoDB數據頁結構 二、總結 1、一條條行數據是如何在數…

世賽背景下,中職物聯網應用與服務賽項實訓解決方案

一、世賽背景與物聯網應用賽項概述 1.1 世賽發展歷程及對中職教育的影響 世界技能大賽(WorldSkills Competition,簡稱世賽)自1950年創立以來,已經成為全球范圍內展示職業技能水平的重要賽事。截至2024年,世賽已成功舉…

【攻防篇】解決:阿里云docker 容器中自動啟動xmrig挖礦-- 實戰

文章目錄 場景一、問題二、原因三、解決方案1、控制臺處理2、 [清除與防護](https://blog.csdn.net/ladymorgana/article/details/148921668?spm1001.2014.3001.5501)1. 緊急處理:停止挖礦進程2. 清理被感染的容器3. 防護措施:防止再次被入侵4. 排查入侵…

飛算智造JavaAI:智能編程革命——AI重構Java開發新范式

文章目錄 引言:當傳統Java開發遇上AI一、技術架構解析1.1 核心架構圖1.2 關鍵技術棧 二、實戰演示:從需求到代碼的全AI輔助2.1 場景:電商優惠券系統開發2.2 代碼生成實例2.3 智能調試演示 三、與傳統開發模式對比測試3.1 基準測試數據3.2 典型…

[特殊字符] 分享裂變新姿勢:用 UniApp + Vue3 玩轉小程序頁面分享跳轉!

在如今流量成本日益攀升的移動互聯網時代,"用戶分享拉新" 成為了增長的重要策略。而微信小程序作為天然具備社交傳播力的平臺,提供了較完善的分享機制支持。本文將從實戰角度出發,手把手教你如何使用 uni-app Vue3 構建一個支持「…

[創業之路-458]:企業經營層 - 藍海戰略 - 重構價值曲線、整合產業要素、創造新需求

“重構價值曲線、整合產業要素、創造新需求”是藍海戰略中實現價值創新的核心路徑,它們構成了一個從內部優化到外部協同,再到市場顛覆的完整邏輯鏈條。以下從理論框架、實踐方法和企業案例三個維度展開分析: 一、重構價值曲線:打…

慢查詢引發對mysql索引的探索

目錄 一、索引分類 1.1 聚簇索引結構 1.2 非聚簇索引(二級索引) 1.3 主鍵索引 1.4 唯一索引 1.5 普通索引 1.6 前綴索引 1.7 聯合索引 1.8 索引下推 1.9 索引區分度 二、優化索引的方法 2.1 索引的特點 2.2 適合創建索引的情況 2.3 不適合創建索引的情況 2.4 優…

啟用不安全的HTTP方法

背景: 今天被安全檢測出一個這樣的問題:啟用不安全的HTTP方法。DELETE方法是用來調試web服務器連接的http方式,支持該方式的服務器文件可能被非法刪除;PUT方法用來向服務器提交文件;TRACE方法本用于客戶端測試到服務器…

fvcom 水深文件dep制作

fvcom 水深文件dep制作 fvcom 水深文件dep制作20250630 本次案例網格和水深展示 vv image Figure 1 Model domain 本次制作其它驅動文件的輸入文件為yellowsea.2dm 格式2dm; 文件內容格式詳細介紹參考: https://www.xmswiki.com/wiki/SMS:2D_Mesh_Files_*.2dm …

ViewModel是EventFlow-State映射

ViewModel負責組裝界面狀態State。引發State變換的原因有很多,比如用戶點擊某個按鈕,一次網絡請求受到應答,一次本地數據庫查詢返回結果等等。因此ViewModel是根據各種事件生成State的對象,換句話說,是一個從多個事件流…

javaweb Day2

PreparedStatement作用: 預編譯SQL語句并執行: 預防SQL注入問題 SQL注入:SQL注入是通過操作輸入來修改事先定義好的SQL語句,用以達到執行代碼對服務器進行攻擊的方法。

Java項目:基于SSM框架實現的中學教學管理系統【ssm+B/S架構+源碼+數據庫+畢業論文+開題報告】

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本景海中學教學管理系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據…

JVM調優實戰 Day 15:云原生環境下的JVM配置

【JVM調優實戰 Day 15】云原生環境下的JVM配置 文章標簽 jvm調優, 云原生, Java性能優化, JVM參數配置, 容器化部署, Kubernetes, Docker, JVM在云原生中的應用 文章簡述 隨著云原生技術的普及,Java 應用越來越多地運行在容器(如 Docker)和…

數據結構day7——文件IO

一、標準 IO 的起源與概念 標準 IO(Standard Input/Output)是由 Dennis Ritchie 在 1975 年設計的一套 IO 庫,后來成為 C 語言的標準組成部分,并被 ANSI C 所采納。它是對底層文件 IO 的封裝,提供了更便捷、可移植的文…

6.Docker部署ES+kibana

部署ES(Elasticsearch)kibana 1.ES暴露的端口很多 2.ES十分消耗內存 3.ES的數據一般需要掛載出去,放在安全目錄(掛載) elastic 前往官方手冊 1.下載運行elasticsearch的 docker run -d --name elasticsearch --net somenet…

使用mysqldump對mysql數據庫進行備份

目錄 1軟件說明 2語法格式 3備份流程 3.1只備份指定數據庫中表和數據 3.1.1準備目錄 3.1.2備份db1數據庫里面的所有表信息 3.1.3還原備份 3.2備份數據庫結構 3.2.1備份db1數據庫的結構和數據 3.2.2還原數據庫 3.3備份所有數據庫 3.3.1備份數據庫 3.3.2還原數據庫 1…

vue3路由跳轉打開新頁面

Vue3 路由跳轉打開新頁面的方法 在 Vue3 中,有幾種方法可以實現路由跳轉時打開新頁面: 1. 使用 router.resolve 方法 import { useRouter } from vue-routerconst router useRouter()const openNewPage (path) > {const resolved router.resolv…

SeaTunnel 社區 2 項目中選“開源之夏 2025”,探索高階數據集成能力!

Apache SeaTunnel 社區在“開源之夏 2025”中再傳捷報,共有兩個項目成功入選,聚焦于 Flink CDC schema 支持與元數據管理的生態擴展方向,體現出 SeaTunnel 在實時數據集成和平臺化能力構建上的深入布局。 中選項目與學生如下: 《…

Neo4j無法建立到 localhost:7474 服務器的連接出現404錯誤

一、確認中文路徑問題(核心原因) 安裝路徑包含中文,可能導致 Windows 命令行或 Neo4j 解析路徑時出錯。 解決方法: 重新安裝 Neo4j 到英文路徑(推薦): 將 Neo4j 解壓或安裝到不含中文的目錄&a…

鋰離子電池均衡拓撲綜述

鋰離子電池均衡拓撲綜述 一、引言 鋰離子電池因其高能量密度、長循環壽命等優點,在電動汽車、儲能系統等領域得到了廣泛應用。然而,電池組在使用過程中,由于電池個體差異、充放電管理等因素,會出現荷電狀態(SOC&…