在Shell执行pytest -h
可以看到pytest的命令行参数有这10大类,共132个
序号 | 类别 | 中文名 | 包含命令行参数数量 |
---|---|---|---|
1 | positional arguments | 形参 | 1 |
2 | general | 通用 | 31 |
3 | reporting | 报告 | 18 |
4 | collection | 收集 | 15 |
5 | test session debugging and configuration | 测试session调试和配置 | 11 |
6 | pytest-warnings | pytest警告 | 1 |
7 | logging | 日志 | 11 |
8 | reporting-allure | allure测试报告 | 3 |
9 | ini-options | pytest.ini/tox.ini/setup.cfg配置文件 | 37 |
10 | environment variables | 环境变量 | 4 |
1.positional arguments
[file_or_dir]
指定一个或多个文件/目录
代码语言:javascript复制pytest [file_or_dir] [file_or_dir] [...]
2.general
[-k EXPRESSION]
名字包含test_method或test_other的函数或类
代码语言:javascript复制-k "test_method or test_other"
名字不包含test_method
代码语言:javascript复制-k "not test_method"
名字不包含test_method不包含test_other
代码语言:javascript复制-k 'not test_method and not test_other'
大小写敏感。
源码这里不是很明白,先放这,以后再补充解释吧
代码语言:javascript复制@classmethod
def from_item(cls, item: "Item") -> "KeywordMatcher":
mapped_names = set()
# Add the names of the current item and any parent items.
import pytest
for node in item.listchain():
if not isinstance(node, (pytest.Instance, pytest.Session)):
mapped_names.add(node.name)
# Add the names added as extra keywords to current or parent items.
mapped_names.update(item.listextrakeywords())
# Add the names attached to the current function through direct assignment.
function_obj = getattr(item, "function", None)
if function_obj:
mapped_names.update(function_obj.__dict__)
# Add the markers to the keywords as we no longer handle them correctly.
mapped_names.update(mark.name for mark in item.iter_markers())
return cls(mapped_names)
[-m MARKEXPR]
包含mark1,不包含mark2
代码语言:javascript复制-m 'mark1 and not mark2'
[--markers ]
显示markers
代码语言:javascript复制pytest --markers
[-x, --exitfirst]
第一个error或failed的test就退出,2个参数等价
代码语言:javascript复制pytest -x
代码语言:javascript复制pytest --exitfirst
[--maxfail=num]
2个errors或failures就退出
代码语言:javascript复制pytest --maxfail=2
[--strict-config]
解析配置文件中pytest
部分时,遇到warning就抛出error
pytest --strict-config
[-c file]
从my.ini
文件加载配置
pytest -c my.ini
[--continue-on-collection-errors]
收集test失败,仍然强制继续执行
代码语言:javascript复制pytest --continue-on-collection-errors
[--rootdir=ROOTDIR]
tests根目录,相对路径
代码语言:javascript复制pytest --rootdir="root_dir"
代码语言:javascript复制pytest --rootdir="./root_dir"
代码语言:javascript复制pytest --rootdir="root_dir/another_dir/"
绝对路径
代码语言:javascript复制pytest --rootdir="/home/user/root_dir"
带变量
代码语言:javascript复制pytest --rootdir="$HOME/root_dir"
[--fixtures, --funcargs]
显示fixtures,以下等价
代码语言:javascript复制pytest --fixtures
代码语言:javascript复制pytest --funcargs
显示以_开头的fixture
代码语言:javascript复制pytest --fixtures -v
[--fixtures-per-test]
显示每个test用到的fixture
代码语言:javascript复制pytest --fixtures-per-test
[--pdb]
在errors或KeyboardInterrupt时,启用默认Python debugger
代码语言:javascript复制pytest --pdb
[--pdbcls=modulename:classname]
启用自定义Python debugger,由IPython.terminal.debugger
module下的TerminalPdb
class定义
pytest --pdbcls=IPython.terminal.debugger:TerminalPdb
[--trace]
run每个test时break,进入debugger交互
代码语言:javascript复制pytest --trace
[--capture=method]
文件描述符(默认)
代码语言:javascript复制pytest --capture=fd
stdout/stderr 内存
代码语言:javascript复制pytest --capture=sys
显示print
代码语言:javascript复制pytest --capture=no
tee-sys
代码语言:javascript复制pytest --capture=tee-sys
[-s]
等价于--capture=no
[--runxfail]
强制运行xfail标记的test
代码语言:javascript复制pytest --runxfail
[--lf, --last-failed]
重跑上次失败的tests,如果没有失败就重跑全部,以下等价
代码语言:javascript复制pytest -lf
代码语言:javascript复制pytest --last-failed
[--ff, --failed-first]
优先跑上次失败的test,tests的顺序会被打乱,以下等价
代码语言:javascript复制pytest -ff
代码语言:javascript复制pytest --failed-first
[--nf, --new-first]
优先跑新添加的tests,剩余的按文件mtime顺序,以下等价
代码语言:javascript复制pytest --nf
代码语言:javascript复制pytest --new-first
[--cache-show=[CACHESHOW]]
显示缓存,默认*
pytest --cache-show
显示缓存,带参数cachenodeids
pytest --cache-show=cachenodeids
[--cache-clear]
运行开始时清缓存
代码语言:javascript复制pytest --cache-clear
[--lfnf={all,none}, --last-failed-no-failures={all,none}]
没有last-failed缓存数据,或上次没有失败时,
跑全部tests
代码语言:javascript复制pytest --lfnf=all
代码语言:javascript复制pytest --last-failed-no-failures=all
不运行
代码语言:javascript复制pytest --lfnf=none
代码语言:javascript复制pytest --last-failed-no-failures=none
[--sw, --stepwise]
逐步运行,在失败时退出,下次运行时从失败的用例开始
代码语言:javascript复制pytest -sw
代码语言:javascript复制pytest --stepwise
[--stepwise-skip]
跳过第一个失败的test,如果再遇到失败就退出
代码语言:javascript复制pytest --stepwise-skip
[--allure-severities=SEVERITIES_SET]
指定allure severities运行
代码语言:javascript复制pytest --allure-severities=blocker, critical, normal, minor, trivial
[--allure-epics=EPICS_SET]
指定allure epics运行
代码语言:javascript复制pytest --allure-epics=my_epic
[--allure-features=FEATURES_SET]
指定allure features运行
代码语言:javascript复制pytest --allure-features=my_feature
[--allure-stories=STORIES_SET]
指定allure stories运行
代码语言:javascript复制pytest --allure-stories=my_story
[--allure-link-pattern=LINK_TYPE:LINK_PATTERN]
不知道怎么用,溜了溜了
代码语言:javascript复制pytest --allure-link-pattern=
3.reporting
[--durations=N]
显示2个最慢的setup/test的耗时
代码语言:javascript复制pytest --durations=2
显示所有耗时
代码语言:javascript复制pytest --durations=0
[-v, --verbose]
输出详细信息
代码语言:javascript复制pytest -v
代码语言:javascript复制pytest --verbose
[-q, --quiet]
输出简要信息
代码语言:javascript复制pytest -q
代码语言:javascript复制pytest --quiet
[--verbosity=VERBOSE]
设置信息显示等级为2
代码语言:javascript复制pytest --verbosity=2
[-r chars]
默认"fE"
显示failed的信息
代码语言:javascript复制pytest -r f
显示Error的信息
代码语言:javascript复制pytest -r E
显示skipped的信息
代码语言:javascript复制pytest -r s
显示xfailed的信息
代码语言:javascript复制pytest -r x
显示Xpassed的信息
代码语言:javascript复制pytest -r X
显示passed的信息
代码语言:javascript复制pytest -r p
显示Passed with output的信息
代码语言:javascript复制pytest -r P
显示all except passed的信息
代码语言:javascript复制pytest -r a
代码语言:javascript复制pytest -r A
显示warnings are enabled by default (--disable-warnings)的信息
代码语言:javascript复制pytest -r w
重置list
代码语言:javascript复制pytest -r N
[-l, --showlocals]
在tracebacks中显示局部变量,默认不显示
代码语言:javascript复制pytest -l
代码语言:javascript复制pytest --showlocals
[--tb=style]
traceback打印模式
代码语言:javascript复制pytest --tb=auto
代码语言:javascript复制pytest --tb=long
代码语言:javascript复制pytest --tb=short
代码语言:javascript复制pytest --tb=line
代码语言:javascript复制pytest --tb=native
代码语言:javascript复制pytest --tb=no
[--show-capture]
失败的tests如何显示,默认"all"
代码语言:javascript复制pytest --show-capture=no
代码语言:javascript复制pytest --show-capture=stdout
代码语言:javascript复制pytest --show-capture=stderr
代码语言:javascript复制pytest --show-capture=log
代码语言:javascript复制pytest --show-capture=all
[--full-trace]
不截取traceback,默认会截断
代码语言:javascript复制pytest --full-trace
[--color=color]
显示颜色
代码语言:javascript复制pytest --color=yes
不显示颜色
代码语言:javascript复制pytest --color=no
自动
代码语言:javascript复制pytest --color=auto
[--pastebin=mode]
没什么用
代码语言:javascript复制pytest --pastebin=mode
[--junit-xml=path]
创建junit-xml风格的测试报告
代码语言:javascript复制pytest --junit-xml=path
[--junit-prefix=str]
junit-xml输出中的classnames添加前缀hello
代码语言:javascript复制pytest --junit-prefix="hello"
[--result-log=path]
不建议使用
代码语言:javascript复制pytest --result-log=path
4.collection
[--collect-only, --co]
只收集,不执行。可以用来统计写了多少条自动化用例
代码语言:javascript复制pytest --collect-only
代码语言:javascript复制pytest --co
[--pyargs]
把所有参数解释为python包(package)
代码语言:javascript复制pytest --pyargs
[--ignore=path]
忽略不收集,可以多个(逗号隔开)
代码语言:javascript复制pytest --ignore=path1,path2,path3
[--ignore-glob=path]
path匹配,可以多个(逗号隔开)
代码语言:javascript复制pytest --ignore-glob="*_01.py"
[--deselect=nodeid_prefix]
通过node id prefix反选。可以多个(逗号隔开)
取消选择tests/foobar/test_foobar_01.py::test_a
代码语言:javascript复制--deselect="tests/foobar/test_foobar_01.py::test_a"
[--confcutdir=dir]
只加载相对于tests/foobar/目录的conftest.py文件
代码语言:javascript复制pytest --confcutdir="tests/foobar/"
[--noconftest]
不加载conftest.py文件
代码语言:javascript复制pytest --noconftest
[--keep-duplicates]
收集重复的test文件,默认只会收集1item,加参数后会收集2items
代码语言:javascript复制pytest test.py test.py --keep-duplicates
[--collect-in-virtualenv]
收集本地虚拟环境目录的tests
代码语言:javascript复制pytest --collect-in-virtualenv
[--doctest-modules]
doctest没啥用
代码语言:javascript复制pytest --doctest-modules
[--doctest-report={none,cdiff,ndiff,udiff,only_first_failure}]
doctest没啥用
代码语言:javascript复制pytest --doctest-report={none,cdiff,ndiff,udiff,only_first_failure}
[--doctest-glob=pat]
doctest没啥用
代码语言:javascript复制pytest --doctest-glob=pat
[--doctest-ignore-import-errors]
doctest没啥用
代码语言:javascript复制pytest --doctest-ignore-import-errors
[--doctest-continue-on-failure]
doctest没啥用
代码语言:javascript复制pytest --doctest-continue-on-failure
5.test session debugging and configuration
[--basetemp=dir]
test run的base临时目录(如果存在会先删除)
代码语言:javascript复制pytest --basetemp=dir
[-V, --version]
pytest版本
代码语言:javascript复制pytest -V
代码语言:javascript复制pytest --version
[-h, --help]
pytest帮助
代码语言:javascript复制pytest -h
代码语言:javascript复制pytest --help
[-p name]
加载plugin module或 entry point
代码语言:javascript复制pytest -p name
[不加载doctest]
代码语言:javascript复制pytest -p no:doctest
[--trace-config]
查看本地安装好的第三方插件
代码语言:javascript复制pytest --trace-config
[--debug]
保存debug信息到'pytestdebug.log'文件
代码语言:javascript复制pytest --debug
[-o OVERRIDE_INI, --override-ini=OVERRIDE_INI]
覆盖ini文件配置
代码语言:javascript复制pytest -o xfail_strict=True -o cache_dir=cache
代码语言:javascript复制pytest --override-ini=OVERRIDE_INI
[--assert=MODE]
默认rewrite
代码语言:javascript复制pytest --assert=rewrite
无assertion debugging
代码语言:javascript复制pytest --assert=plain
[--setup-only]
只setup fixtures,不执行tests
代码语言:javascript复制pytest --setup-only
[--setup-show]
执行tests的时候显示fixture setup
代码语言:javascript复制pytest --setup-show
[--setup-plan]
显示fixtures和tests计划会执行什么,但是不执行
也可以用来统计自动化用例
代码语言:javascript复制pytest --setup-plan
6.pytest-warnings
[-W PYTHONWARNINGS, --pythonwarnings=PYTHONWARNINGS]
设置报告哪些warnings
代码语言:javascript复制pytest -W PYTHONWARNINGS
代码语言:javascript复制pytest --pythonwarnings=PYTHONWARNINGS
7.logging
推荐直接使用loguru第三方库。
[--log-level=LEVEL]
默认没有设置,依赖log handler
WARNING DEBUG INFO ERROR
代码语言:javascript复制pytest --log-level=LEVEL
[--log-format=LOG_FORMAT]
日志格式
代码语言:javascript复制pytest --log-format="%(asctime)s %(levelname)s %(message)s"
[--log-date-format=LOG_DATE_FORMAT]
日期格式
代码语言:javascript复制pytest --log-date-format="%Y-%m-%d %H:%M:%S"
[--log-cli-level=LOG_CLI_LEVEL]
cli日志级别
代码语言:javascript复制pytest --log-cli-level=LOG_CLI_LEVEL
[--log-cli-format=LOG_CLI_FORMAT]
cli日志格式
代码语言:javascript复制pytest --log-cli-format="%(asctime)s %(levelname)s %(message)s"
[--log-cli-date-format=LOG_CLI_DATE_FORMAT]
cli日志级别
代码语言:javascript复制pytest --log-cli-date-format="%Y-%m-%d %H:%M:%S"
[--log-file=LOG_FILE]
日志文件路径
代码语言:javascript复制pytest --log-file=LOG_FILE
[--log-file-level=LOG_FILE_LEVEL]
日志文件级别
代码语言:javascript复制pytest --log-file-level=LOG_FILE_LEVEL
[--log-file-format=LOG_FILE_FORMAT]
日志文件格式
代码语言:javascript复制pytest --log-file-format="%(asctime)s %(levelname)s %(message)s"
[--log-file-date-format=LOG_FILE_DATE_FORMAT]
日志文件日期
代码语言:javascript复制pytest --log-file-date-format="%Y-%m-%d %H:%M:%S"
[--log-auto-indent=LOG_AUTO_INDENT]
自动换行
true|flase on|off
代码语言:javascript复制pytest --log-auto-indent=LOG_AUTO_INDENT
8.reporting-allure
[--alluredir=DIR]
allure数据生成目录,注意不是html哦,而是json文件,需要allure generate data_dir -o html_dir
才能生成html
pytest --alluredir=DIR
[--clean-alluredir]
如果存在alluredir,先清除
代码语言:javascript复制pytest --clean-alluredir
[--allure-no-capture]
报告不捕获pytest的logging/stdout/stderr信息
代码语言:javascript复制pytest --allure-no-capture
9.ini-options
ini文件用例设置一些初始化默认值。
部分内容其实质跟参数是一样用法。
[markers (linelist)]
自定义marker
代码语言:javascript复制# pytest.ini
[pytest]
markers =
webtest: Run the webtest case
hello: Run the hello case
[empty_parameter_set_mark (string)]
默认情况下,如果@pytest.mark.parametrize
的argnames
中的参数没有接收到任何的实参的话,用例的结果将会被置为SKIPPED
;empty_parameter_set_mark可以设置为skip、xfail、fail_at_collect。
[norecursedirs (args)]
忽略一些目录
代码语言:javascript复制# pytest.ini
[pytest]
norecursedirs = .* build dist CVS _darcs {arch} *.egg venv src
[testpaths (args)]
指定目录
代码语言:javascript复制# pytest.ini
[pytest]
testpaths = test_path
[usefixtures (args)]
默认使用fixtures。
[python_files (args)]
glob文件匹配模式的python test modules。
[python_classes (args)]
前缀/glob文件匹配模式的python test classes。
[python_functions (args)]
前缀/glob文件匹配模式的python test functions。
[ty_support (bool)]
有风险,没用。
[console_output_style (string)]
控制台输出样式
- classic 经典样式
- progress: 带进度百分比
- count 计数而不是百分比
[xfail_strict (bool)]
默认false,true时@pytest.mark.xfail的test,会被强制失败,即使是成功的。
[enable_assertion_pass_hook (bool)]
确保删除之前生成的pyc缓存文件。
[junit_suite_name (string)]
不用学。
[junit_logging (string)]
不用学。
[junit_log_passing_tests (bool)]
不用学。
[junit_duration_report (string)]
不用学。
[junit_family (string)]
不用学。
[doctest_optionflags (args)]
不用学。
[doctest_encoding (string)]
不用学。
[cache_dir (string)]
缓存目录。
[filterwarnings (linelist)]
同 -W/--pythonwarnings。
[log_level (string)]
同命令行参数。
[log_format (string)]
同命令行参数。
[log_date_format (string)]
同命令行参数。
[log_cli (bool)]
true,test run的时候,实时显示日志。
[log_cli_level (string)]
同命令行参数。
[log_cli_format (string)]
同命令行参数。
[log_cli_date_format (string)]
同命令行参数。
[log_file (string)]
同命令行参数。
[log_file_level (string)]
同命令行参数。
[log_file_format (string)]
同命令行参数。
[log_file_date_format (string)]
同命令行参数。
[log_auto_indent (string)]
同命令行参数。
[faulthandler_timeout (string)]
如果test的运行时间超过设定的时间(超时),会打印相关traceback。
[addopts (args)]
执行时带的默认参数,可以避免每次都要输入一遍
代码语言:javascript复制addopts = -rsxX -v --reruns=1 --count=2
[minversion (string)]
pytest最小版本号。如果pytest低于这个版本,运行会报错。
[required_plugins (args)]
必须的插件。
10.environment variables
[PYTEST_ADDOPTS]
命令行选项
代码语言:javascript复制export PYTEST_ADDOPTS=
[PYTEST_PLUGINS]
包含应作为插件加载的以逗号分隔的模块列表
代码语言:javascript复制export PYTEST_PLUGINS=mymodule.plugin,xdist
[PYTEST_DISABLE_PLUGIN_AUTOLOAD]
禁用插件自动加载
代码语言:javascript复制export PYTEST_DISABLE_PLUGIN_AUTOLOAD=
[PYTEST_DEBUG]
启用pytest调试
代码语言:javascript复制export PYTEST_DEBUG=