pytest 用例查詢原理
當執行pytest命令時,pytest會從project中查詢test來執行。本文先從幾個路徑相關的概念講起,這樣便於理解pytest在遍歷路徑時的走向。
幾個路徑相關的概念
PYTHONHOME
定義了Python標準庫的路徑。
PYTHONPATH
定義了Python import模組搜尋的路徑。
basedir
①如果是module,目錄中不包括__init__.py
,basedir的值等於a
a
|--b_test.py
②如果是package,目錄中包括__init__.py
,basedir的值等於y
y
|--a
| |--b_test.py
| |--__init__.py // 表明a是package
③如果是package的package,目錄中都包括__init__.py
,basedir的值等於x
x
|--y
| |--a
| |--__init__.py // 表明y是package
| | |--b_test.py
| | |--__init__.py // 表明a是package
sys.path
模組搜尋路徑集,包括以上3個目錄。它決定了import能否找到模組。
current working directory
當前工作目錄,縮寫cwd,等於執行pytest
命令的目錄。
如果用python -m pytest
,以模組的方式來執行,會把cwd也加入sys.path中。
例如,在a目錄下執行pytest,cwd是a,basedir是y,sys.path中只包含y。如果執行python -m pytest,sys.path中既包含y也包含a
y
|--a
| |--b_test.py
| |--__init__.py // 表明a是package
pytest查詢原理
第一種情況
pytest命令是可以加引數的,如果加了資料夾/檔案引數,那麼就只在引數指定的資料夾/檔案中查詢,可以指定多個。例如
pytest a_dir b_dir c_test.py d_test.py
特殊的,如果a_dir中包含了c_test.py,那麼會收整合2次,pytest也會執行2次。
也可以使用::來指定函式/類/方法,例如
pytest test_mod.py::test_func
pytest test_mod.py::TestClass::test_method
第二種情況
pytest不帶引數。
從“當前工作目錄”開始找,遞迴查詢子目錄。匹配 test_*.py 或 *_test.py 的檔案。
找到這些模組(Python中1個.py檔案就是1個模組)以後,進一步根據上節所述找basedir。
呼叫
sys.path.insert(0, basedir)
,把basedir加入sys.path中。這些模組就可以被pytest import了。import之後,查詢test開頭的函式或方法。如果是類中的方法,類必須以Test開頭,並且沒有__init__方法。
公眾號dongfanger
相關文章
- pytest用例管理
- group by 查詢原理
- Lucene查詢原理
- Pytest測試框架(一):pytest安裝及用例執行框架
- oracle 例項表查詢Oracle
- Elasticsearch系列---聚合查詢原理Elasticsearch
- DNS 查詢原理詳解DNS
- pytest(4)-測試用例執行順序
- pytest 用例資料依賴如何處理
- pytest(9)-標記用例(指定執行、跳過用例、預期失敗)
- pytest 能否執行 nose 寫的測試用例
- Pytest 系列(25)- 標記用例級別 @allure.
- [譯] SQLite 底層查詢原理SQLite
- MySQL全面瓦解12:連線查詢的原理和應用MySql
- 【深基13.例1】查詢
- sql 連線查詢例項(left join)三表連線查詢SQL
- 從根上理解elasticsearch(lucene)查詢原理(2)-lucene常見查詢型別原理分析Elasticsearch型別
- pytest-根據類或函式名選擇用例函式
- pytest(13)-多執行緒、多程式執行用例執行緒
- pytest標記:查詢測試策略、標記測試函式函式
- 從pytest原始碼的角度分析pytest工作原理原始碼
- vue例項+axios-天氣查詢VueiOS
- 二分查詢 理論 例題
- 快遞鳥查詢訂單例項單例
- Mysql 巢狀查詢100例子MySql巢狀
- pytest多程式/多執行緒執行測試用例執行緒
- 實用指南:使用Pytest Allure測試框架新增用例失敗截圖框架
- SSM 框架快速整合例項--學生查詢SSM框架
- 從根上理解elasticsearch(lucene)查詢原理(1)-lucece查詢邏輯介紹Elasticsearch
- 查詢埠號佔用
- 使用SSMS連線和查詢 SQL Server 例項SSMSQLServer
- 基於Lucene查詢原理分析Elasticsearch的效能Elasticsearch
- MySQL索引原理及慢查詢最佳化MySql索引
- 線段樹(1)建樹、單點修改、單點查詢、區間查詢和例題
- 『德不孤』Pytest框架 — 6、Mark分組執行測試用例框架
- SQL SERVER死鎖查詢,死鎖分析,解鎖,查詢佔用SQLServer
- SQL查詢的:子查詢和多表查詢SQL
- MySQL慢查詢記錄原理和內容解析MySql