(3)pytest的setup/teardown

1. 簡介

學過unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例開始前和結束后都去執行一次。
當然還有更高級一點的setupClass和teardownClass,需配合@classmethod裝飾器一起使用,在做selenium自動化的時候,它的效率尤為突出,可以只啟動一次瀏覽器執行多個用例。
pytest框架也有類似于setup和teardown的語法,并且還不止這四個

2. 用例運行級別

  • 模塊級(setup_module/teardown_module)開始于模塊始末,全局的

  • 函數級(setup_function/teardown_function)只對函數用例生效(不在類中)

  • 類級(setup_class/teardown_class)只在類中前后運行一次(在類中)

  • 方法級(setup_method/teardown_method)開始于方法始末(在類中)

  • 類里面的(setup/teardown)運行在調用方法的前后

3. 函數式

3.1 setup_function/teardown_function (每個用例開始和結束時調用一次)
3.1.1 代碼實現:

3.1.2 參考代碼:
# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
#  content of  test_bjhg_class1.py
import pytest
# 函數式def setup_function():print("setup_function:每個用例開始前都會執行")def teardown_function():print("teardown_function:每個用例結束后都會執行")def test_one():print("正在執行----test_one")x = "this"assert 'h' in xdef test_two():print("正在執行----test_two")x = "hello"assert hasattr(x, 'check')def test_three():print("正在執行----test_three")a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main(["-s", "test_fixt.py"])
3.1.3運行結果:

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

3.2 setup_module/teardown_module(所有用例開始和結束時調用一次)
3.2.1 代碼實現:

3.2.2 參考代碼:
# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
#  content of  test_class2.py
import pytest
# 函數式def setup_module():print("setup_module:整個.py模塊只執行一次")print("比如:所有用例開始前只打開一次瀏覽器")def teardown_module():print("teardown_module:整個.py模塊只執行一次")print("比如:所有用例結束只最后關閉瀏覽器")def setup_function():print("setup_function:每個用例開始前都會執行")def teardown_function():print("teardown_function:每個用例結束前都會執行")def test_one():print("正在執行----test_one")x = "this"assert 'h' in xdef test_two():print("正在執行----test_two")x = "hello"assert hasattr(x, 'check')def test_three():print("正在執行----test_three")a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main(["-s", "test_class2.py"])
3.2.3 運行結果:

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

3.3 類和方法

1.setup/teardown和unittest里面的setup/teardown是一樣的功能,setup_class和teardown_class等價于unittest里面的setupClass和teardownClass

3.3.1 代碼實現:

3.3.2 參考代碼:
# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
#  content of  test_class3.py
import pytest
# 類和方法
class TestCase():def setup(self):print("setup: 每個用例開始前執行")def teardown(self):print("teardown: 每個用例結束后執行")def setup_class(self):print("setup_class:所有用例執行之前")def teardown_class(self):print("teardown_class:所有用例結束后執行")def setup_method(self):print("setup_method:  每個用例開始前執行")def teardown_method(self):print("teardown_method:  每個用例結束后執行")def test_one(self):print("正在執行----test_one")x = "this"assert 'h' in xdef test_two(self):print("正在執行----test_two")x = "hello"assert hasattr(x, 'check')def test_three(self):print("正在執行----test_three")a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main(["-s", "test_class3.py"])
3.3.3 運行結果:

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

備注:這里setup_method和teardown_method的功能和setup/teardown功能是一樣的,一般二者用其中一個即可

3.4 函數和類混合

1.如果一個.py的文件里面既有函數用例又有類和方法用例,運行順序又是怎樣的呢?

3.4.1 代碼實現:

3.4.2 參考代碼:
# coding=utf-8
# 1.導入模塊
#  content of  test_bjhg_class1.py
import pytest
# 類和方法
def setup_module():print("setup_module:整個.py模塊只執行一次")print("比如:所有用例開始前只打開一次瀏覽器")def teardown_module():print("teardown_module:整個.py模塊只執行一次")print("比如:所有用例結束只最后關閉瀏覽器")def setup_function():print("setup_function:每個用例開始前都會執行")def teardown_function():print("teardown_function:每個用例結束前都會執行")def test_one():print("正在執行----test_one")x = "this"assert 'h' in xdef test_two():print("正在執行----test_two")x = "hello"assert hasattr(x, 'check')class TestCase():def setup_class(self):print("setup_class:所有用例執行之前")def teardown_class(self):print("teardown_class:所有用例執行之前")def test_three(self):print("正在執行----test_three")x = "this"assert 'h' in xdef test_four(self):print("正在執行----test_four")x = "hello"assert hasattr(x, 'check')if __name__ == "__main__":pytest.main(["-s", "test_bjhg_class1.py"])
3.4.3 運行結果:

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

2.從運行結果看出,setup_module/teardown_module的優先級是最大的,然后函數里面用到的setup_function/teardown_function與類里面的setup_class/teardown_class互不干涉

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

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

相關文章

Starrocks存算一體和存算分離

網上整理了一下starrocks兩種部署方式的區別差異性,個人感覺生產環境還是盡量存算分離部署,防止資源爭奪等問題影響線上生產數據,雖然存算一體部署起來更方便一些 📊 1. 架構設計 存算一體: 節點類型:僅包含…

多線程編程 ----線程主動退出pthread_exit與線程被動退出pthread_cancel

主動退出 pthread_exit 與 pthread_cancel 的區別 1. 核心區別 特性pthread_exitpthread_cancel調用者線程自身調用,主動退出。其他線程調用,異步請求終止目標線程。行為方式立即終止線程,資源需手動釋放。發送取消請求,線程在取…

電腦開機加速工具,優化啟動項管理

軟件介紹 今天為大家推薦一款專業的電腦啟動項管理工具,這款軟件能有效優化電腦開機速度,幫助用戶管理開機自啟動程序。 使用方式 軟件無需安裝,以管理員身份直接雙擊運行即可使用。為確保安全,軟件特別設計為不添加注冊表…

設備管理的11個指標、七大誤區、六大特征

1、設備的完好率 在這些指標里用得最多,但其對管理的促進作用有限。所謂的完好率,是在檢查期間,完好設備與設備總臺數的比例(設備完好率=完好設備數/設備總數)很多工廠的指標可以達到95%以上。理由很簡單,在檢查的那一刻,如果設備是運轉的,沒出故障,就算是完好的,于…

11OAuth2

目錄 本節大綱 一、OAuth2 簡介 二、OAuth2 授權總體流程 三、四種授權模式 授權碼模式 簡化模式 密碼模式 客戶端模式 四、OAuth2 標準接口 五、GitHub 授權登錄 1. 創建 OAuth 應用 2. 項目開發 六、Spring Security OAuth2 七、授權、資源服務器 1. 授權服務器…

Github Copilot協助解決cucumber插件不支持async/await

一、提示詞 問題描述 在使用了badeball/cypress-cucumber-preprocessor插件后,存在不支持nodejs原生的promise和async/await語法問題 執行用例命令 npx cypress run --env configFilemhesi-staging,TAGS"API005" --spec "cypress/integration/AL…

C++多線程【Linux】

Linux的多線程 Linux的子線程實際上也是個進程&#xff0c;但是比傳統的進程輕量化。 pthread pthread是用于Linux系統下的線程庫&#xff0c;頭文件是<pthread.h>。C11 之前的多線程開發高度依賴平臺原生 API&#xff0c;Windows 以 CreateThread 和內核對象為核心&am…

Windows 環境下 NVM 命令詳解:多版本 Node.js 管理利器

“一個 Node.js 版本走天下&#xff1f;太局限了&#xff01;試試 nvm&#xff0c;版本切換如絲般順滑。” 什么是 NVM NVM&#xff08;Node Version Manager&#xff09;是一個命令行工具&#xff0c;允許你安裝并在多個 Node.js 版本之間自由切換。 在 Linux/macOS 下常用的…

一二級路由之間的傳參方式以及高亮問題

實現如下圖所示的一二級路由的高亮情況&#xff1a; 在一級路由APP.vue下設置&#xff1a; .head a.router-link-active {background-color: rgb(235, 221, 204); }在二級路由Mycenter.vue下設置&#xff1a; /* 要求在點擊跳轉到mycenter_lianxi頁面時候父路由保持高亮…

前端JavaScript力扣HOT100刷題【51-100】

注&#xff1a;純手打&#xff0c;如有錯誤歡迎評論區交流&#xff01; 轉載請注明出處&#xff1a;https://blog.csdn.net/testleaf/article/details/148953015 編寫此文是為了更好地學習前端知識&#xff0c;如果損害了有關人的利益&#xff0c;請聯系刪除&#xff01; 本文章…

智能制造數字孿生集成交付生態鏈:智慧產線極速克隆,孿生重構生產周期

在智能制造的浪潮中&#xff0c;數字孿生技術正以前所未有的速度重塑制造業的生產模式。從產品設計到生產制造&#xff0c;再到運維管理&#xff0c;數字孿生通過構建物理世界的虛擬鏡像&#xff0c;實現了生產全流程的數字化映射與優化。 山東融谷信息以“智能制造數字孿生集成…

非常詳細版: dd.device.geolocation 釘釘微應用獲取定位,移動端 PC端都操作,Vue實現釘釘微應用獲取精準定位并渲染在地圖組件上

dd.device.geolocation 釘釘微應用獲取定位,釘釘微應用獲取精準定位并渲染在地圖組件上 ,手機端 PC端要都可用 【dd.device.geolocation是需要鑒權的哦】 想要的數據和效果圖 想要的數據格式 代碼 <template><div class="dialogStyles"

鴻蒙5:組件狀態共享

目錄 1. 組件狀態共享 1.1 狀態共享-父子傳值&#xff1a;Local、Param、Event 1.2 狀態共享-父子雙向綁定!! 1.3 跨代共享&#xff1a;Provider和Consumer 1.3.1 aliasName和屬性名 1.3.2 實現跨代共享 1.3.3 裝飾復雜類型&#xff0c;配合Trace一起使用 1.3.4 支持共…

【MySQL】12. C語言與數據庫的連接

1. 下載MySQL的連接庫 sudo apt install -y libmysqlclient-dev 2. MySQL連接庫的常用接口介紹 通過下面的樣例了解MYSQL的常用接口&#xff1a; #include <iostream> #include <mysql/mysql.h> using namespace std;const char *host "localhost";…

[springboot系列] 探秘JUnit 5: Java單元測試利器

介紹 JUnit 5 是一個用于 Java 編程語言的單元測試框架&#xff0c;它是 JUnit 框架的第五個版本&#xff0c;與 JUnit 4 相比&#xff0c;JUnit 5 提供了許多改進和新特性&#xff0c;包括更好的擴展性、靈活性和對現代 Java 特性的支持。 JUnit 5 由三個主要的子模塊組成&a…

開源 java android app 開發(十三)繪圖定義控件、搖桿控件的制作

文章的目的為了記錄使用java 進行android app 開發學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發app&#xff0c;臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 java an…

Python 庫 包 sentence-transformers

sentence-transformers 是一個非常流行的 Python 庫&#xff0c;專門用于將文本&#xff08;句子、段落、文檔&#xff09;轉換為高質量的語義向量&#xff08;嵌入&#xff09;。它基于 Transformer 架構&#xff08;如 BERT、RoBERTa、DistilBERT 等&#xff09; 的預訓練模型…

《聚類算法》入門--大白話篇:像整理房間一樣給數據分類

一、什么是聚類算法&#xff1f; 想象一下你的衣柜里堆滿了衣服&#xff0c;但你不想一件件整理。聚類算法就像一個聰明的助手&#xff0c;它能自動幫你把衣服分成幾堆&#xff1a;T恤放一堆、褲子放一堆、外套放一堆。它通過觀察衣服的顏色、大小、款式這些特征&#xff0c;把…

AutoGen(五) Human-in-the-Loop(人類在環)實戰與進階:多智能體協作與Web交互全流程(附代碼)

AutoGen Human-in-the-Loop&#xff08;人類在環&#xff09;實戰與進階&#xff1a;多智能體協作與Web交互全流程&#xff08;附代碼&#xff09; 引言&#xff1a;AI自動化的極限與人類參與的價值 在大模型&#xff08;LLM&#xff09;驅動的AI應用開發中&#xff0c;完全自…

并查集 Union-Find

目錄 引言 簡單介紹 淺淺總結 算法圖解 初始化 根節點查找 集合合并 連通性檢查 例題 大概思路 完整代碼&#xff1a; 引言 一個小小的并查集讓我們在ccpc卡了那么久(還有unordered_map,如果不是忘了map自動排序這么一回事也不至于試那么多發)&#xff0c;至今仍然心有…