目錄:
- 安裝及入門
- 使用和調用方法
- 原有TestSuite使用方法
- 斷言的編寫和報告
- Pytest fixtures:清晰 模塊化 易擴展
- 使用Marks標記測試用例
- Monkeypatching/對模塊和環境進行Mock
- 使用tmp目錄和文件
- 捕獲stdout及stderr輸出
- 捕獲警告信息
- 模塊及測試文件中集成doctest測試
- skip及xfail: 處理不能成功的測試用例
- Fixture方法及測試用例的參數化
- 緩存: 使用跨執行狀態
- unittest.TestCase支持
- 運行Nose用例
- 經典xUnit風格的setup/teardown
- 安裝和使用插件
- 插件編寫
- 編寫鉤子(hook)方法
- 運行日志
- API參考
- 優質集成實踐
- 片狀測試
- Pytest導入機制及sys.path/PYTHONPATH
- 配置選項
- 示例及自定義技巧
- Bash自動補全設置
API參考-Configuration Options
配置選項
這里是一個可以在被寫入內置的配置選項的列表pytest.ini
,tox.ini
或setup.cfg
通常位于版本庫的根文件。所有選項必須在一個[pytest]
部分下([tool:pytest]
對于setup.cfg
文件)。
警告
的使用setup.cfg
是不推薦,除非非常簡單的用例。.cfg
文件使用不同的解析器pytest.ini
,tox.ini
這可能導致難以追蹤問題。如果可能,建議使用后面的文件來保存pytest配置。
配置文件選項可以通過使用在命令行中覆蓋,-o/--override
也可以多次傳遞。預期的格式是name=value
。例如:
pytest -o console_output_style=classic -o cache_dir=/tmp/mycache
addopts
將指定OPTS
的命令行參數添加到命令行參數集中,就像它們已由用戶指定一樣。示例:如果你有此ini文件內容:
# content of pytest.ini
[pytest]
addopts = --maxfail=2 -rf # exit after 2 failures, report fail info
發行實際意味著:pytest test_hello.py
pytest --maxfail=2 -rf test_hello.py
默認是不添加選項。
cache_dir
設置存儲緩存插件內容的目錄。默認目錄是 .pytest_cache
在rootdir中創建的。目錄可以是相對路徑或絕對路徑。如果設置相對路徑,則相對于rootdir創建目錄。另外,path可能包含將被擴展的環境變量。有關緩存插件的更多信息,請參閱緩存:使用跨testrun狀態。
confcutdir
設置向上搜索conftest.py
文件的目錄。默認情況下,pytest將停止conftest.py
從項目的pytest.ini
/ tox.ini
/ 向上搜索文件(setup.cfg
如果有),或者直到文件系統根目錄。
console_output_style
運行測試時設置控制臺輸出樣式:
-
classic
:經典的pytest輸出。 -
progress
:喜歡經典的pytest輸出,但帶有進度指示器。 -
count
:像進度一樣,但隨著測試完成次數而不是百分比顯示進度。
默認值為progress
,但classic
如果你愿意,或者新模式導致意外問題,你可以回退到:
# content of pytest.ini
[pytest]
console_output_style = classic
doctest_encoding
用于解碼帶有文檔字符串的文本文件的默認編碼。 看看pytest如何處理doctests。
doctest_optionflags
標準doctest
模塊中的一個或多個doctest標志名稱。 看看pytest如何處理doctests。
empty_parameter_set_mark
允許在參數化中為空參數選擇操作
-
skip
使用空參數跳過測試(默認) -
xfail
使用空參數標記測試為xfail(run = False) -
fail_at_collect
如果parametrize收集空參數集,則引發異常
# content of pytest.ini
[pytest]
empty_parameter_set_mark = xfail
注意
計劃xfail
在將來的版本中更改此選項的默認值,因為這被認為不易出錯, 有關詳細信息,請參閱#3155。
filterwarnings
設置應為匹配的警告采取的過濾器和操作的列表。默認情況下,測試會話期間發出的所有警告都將在測試會話結束時顯示在摘要中。
# content of pytest.ini
[pytest]
filterwarnings =
error
ignore::DeprecationWarning
這告訴pytest忽略棄用警告并將所有其他警告變為錯誤。有關更多信息,請參閱警告捕獲。
junit_family
版本4.2中的新功能。
配置生成的JUnit XML文件的格式。可能的選擇是:
-
xunit1
(或legacy
):生成舊樣式輸出,與xunit 1.0格式兼容。這是默認值。 -
xunit2
:生成xunit 2.0樣式輸出,
哪個應該與最新的Jenkins版本更兼容。
[pytest]
junit_family = xunit2
junit_suite_name
要設置根測試套件xml項的名稱,可以junit_suite_name
在配置文件中配置該選項:
[pytest]
junit_suite_name = my_suite
log_cli_date_format
設置一個time.strftime()
兼容的字符串,該字符串將在格式化實時日志記錄的日期時使用。
[pytest]
log_cli_date_format = %Y-%m-%d %H:%M:%S
有關更多信息,請參閱實時日志。
log_cli_format
設置logging
用于格式化實時日志記錄消息的兼容字符串。
[pytest]
log_cli_format = %(asctime)s %(levelname)s %(message)s
有關更多信息,請參閱實時日志。
log_cli_level
設置應為實時日志記錄捕獲的最小日志消息級別。可以使用整數值或級別的名稱。
[pytest]
log_cli_level = INFO
有關更多信息,請參閱實時日志。
log_date_format
設置time.strftime()
與日志記錄捕獲格式化日期時將使用的兼容字符串。
[pytest]
log_date_format = %Y-%m-%d %H:%M:%S
有關更多信息,請參閱日志記錄。
log_file
pytest.ini
除了活動的其他日志記錄工具之外,還應設置相對于應寫入日志消息的文件的文件名。
[pytest]
log_file = logs/pytest-logs.txt
有關更多信息,請參閱日志記錄。
log_file_date_format
設置time.strftime()
在格式化日志文件的日期時將使用的兼容字符串。
[pytest]
log_file_date_format = %Y-%m-%d %H:%M:%S
有關更多信息,請參閱日志記錄。
log_file_format
設置一個logging
兼容的字符串,用于格式化重定向到日志文件的日志消息。
[pytest]
log_file_format = %(asctime)s %(levelname)s %(message)s
有關更多信息,請參閱日志記錄。
log_file_level
設置應為日志記錄文件捕獲的最小日志消息級別。可以使用整數值或級別的名稱。
[pytest]
log_file_level = INFO
有關更多信息,請參閱日志記錄。
log_format
設置logging
用于格式化捕獲的日志消息的兼容字符串。
[pytest]
log_format = %(asctime)s %(levelname)s %(message)s
有關更多信息,請參閱日志記錄。
log_level
設置應記錄捕獲的最小日志消息級別。可以使用整數值或級別的名稱。
[pytest]
log_level = INFO
有關更多信息,請參閱日志記錄。
log_print
如果設置為False
,將禁用顯示失敗測試的捕獲日志消息。
[pytest]
log_print = False
有關更多信息,請參閱日志記錄。
markers
使用--strict
命令行參數時,只允許使用已知的標記(由代碼核心pytest或某些插件定義)。你可以在此設置中列出其他標記,以將其添加到白名單。
你可以列出每行一個標記名稱,從選項名稱縮進。
[pytest]
markers =
slow
serial
minversion
指定運行測試所需的最小pytest版本。
# content of pytest.ini
[pytest]
minversion = 3.0 # will fail if we run with pytest-2.8
norecursedirs
設置目錄basename模式以避免在遞歸測試發現時使用。各個(fnmatch樣式)模式應用于目錄的基本名稱,以決定是否遞歸到目錄。模式匹配字符:
* matches everything
? matches any single character
[seq] matches any character in seq
[!seq] matches any char not in seq
默認模式是。設置替換默認值。以下是如何避免某些目錄的示例:'.*', 'build', 'dist','CVS', '_darcs', '{arch}', '*.egg', 'venv'``norecursedirs
[pytest]
norecursedirs = .svn _build tmp*
這將告訴pytest
我們不要查看典型的subversion或sphinx-build目錄或任何tmp
前綴目錄。
此外,pytest
將嘗試通過激活腳本的存在智能地識別和忽略virtualenv。除非??collect?in?virtualenv
給出,否則在測試收集期間不會考慮任何被視為虛擬環境根目錄的目錄。另請注意, norecursedirs
優先于??collect?in?virtualenv
; 例如,如果你打算在virtualenv中使用匹配的基本目錄運行測試 ,則除了使用該標志外, '.*'
還必須覆蓋。norecursedirs``??collect?in?virtualenv
python_classes
一個或多個名稱前綴或glob樣式模式,用于確定考慮用于測試集合的類。通過在模式之間添加空格來搜索多個glob模式。默認情況下,pytest會將任何以前綴Test
為前綴的類視為測試集合。以下是如何從以下結尾的類中收集測試的示例Suite
:
[pytest]
python_classes = *Suite
請注意,unittest.TestCase
無論此選項如何,始終都會收集派生類,因為unittest
自己的集合框架用于收集這些測試。
python_files
一個或多個Glob樣式的文件模式,用于確定哪些python文件被視為測試模塊。通過在模式之間添加空格來搜索多個glob模式:
[pytest]
python_files = test_*.py check_*.py example_*.py
或者每行一個:
[pytest]
python_files =
test_*.py
check_*.py
example_*.py
默認情況下,匹配的文件test_*.py
和*_test.py
將被視為測試模塊。
python_functions
一個或多個名稱前綴或glob-patterns,用于確定哪些測試函數和方法被視為測試。通過在模式之間添加空格來搜索多個glob模式。默認情況下,pytest會將任何前綴test
為函數的函數視為測試。以下是如何收集以下結尾的測試函數和方法的示例_test
:
[pytest]
python_functions = *_test
請注意,這對生成在派生類上的方法沒有影響,因為自己的集合框架用于收集這些測試。unittest .TestCase``unittest
有關更多詳細示例,請參閱更改命名約定。
testpaths
當從rootdir目錄執行pytest時,如果在命令行中沒有給出特定的目錄,文件或測試ID,則設置應搜索測試的目錄列表。當所有項目測試都在一個已知位置以加速測試收集并避免意外接收不需要的測試時非常有用。
[pytest]
testpaths = testing doc
這告訴pytest只在 從根目錄執行時查找testing
和doc
目錄中的測試。
usefixtures
將應用于所有測試功能的燈具列表; 這在語義上與將@pytest.mark.usefixtures
標記應用于所有測試函數相同。
[pytest]
usefixtures =
clean_db
xfail_strict
如果設置為True
,則標記為@pytest.mark.xfail
實際成功的測試將默認為測試套件失敗。有關更多信息,請參閱strict參數。
[pytest]
xfail_strict = True```