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