pytest封神之路第二步 132个命令行参数用法

2020-09-23 09:59:24 浏览数 (1)

在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

代码语言:javascript复制
pytest --strict-config

[-c file]

my.ini文件加载配置

代码语言:javascript复制
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定义

代码语言:javascript复制
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]]

显示缓存,默认*

代码语言:javascript复制
pytest --cache-show

显示缓存,带参数cachenodeids

代码语言:javascript复制
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

代码语言:javascript复制
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.parametrizeargnames中的参数没有接收到任何的实参的话,用例的结果将会被置为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=

0 人点赞