pytest学习和使用18-pytest.ini配置文件如何使用?
迪丽瓦拉
2025-05-28 15:59:52
0

18-pytest.ini配置文件如何使用?

  • 1 配置文件的作用
  • 2 文件格式
  • 3 查看pytest.ini的选项
  • 4 存放位置
  • 5 常用选项
    • 5.1 marks
    • 5.2 xfail_strict
    • 5.3 addopts
    • 5.4 log_cli
    • 5.5 norecursedirs
  • 6 本文涉及的pytest.ini源码

1 配置文件的作用

  • 改变pytest的运行方式;
  • pytest.ini是一个固定的文件;
  • pytest.ini用来读取配置信息。

2 文件格式

# 文件名为:pytest.ini[pytest]addopts = 
xfail_strict = 

3 查看pytest.ini的选项

  • 使用命令:
pytest --help
  • 如下:
C:\Users\Administrator>pytest --help
usage: pytest [options] [file_or_dir] [file_or_dir] [...]positional arguments:file_or_dirgeneral:-k EXPRESSION         only run tests which match the given substring expression. An expression is a python evaluatableexpression where all names are substring-matched against test names and their parent classes.Example: -k 'test_method or test_other' matches all test functions and classes whose namecontains 'test_method' or 'test_other', while -k 'not test_method' matches those that don'tcontain 'test_method' in their names. -k 'not test_method and not test_other' will eliminate thematches. Additionally keywords are matched to classes and functions containing extra names intheir 'extra_keyword_matches' set, as well as functions which have names assigned directly tothem. The matching is case-insensitive.-m MARKEXPR           only run tests matching given mark expression.For example: -m 'mark1 and not mark2'.--markers             show markers (builtin, plugin and per-project ones).-x, --exitfirst       exit instantly on first error or failed test.--fixtures, --funcargsshow available fixtures, sorted by plugin appearance (fixtures with leading '_' are only shownwith '-v')--fixtures-per-test   show fixtures per test--pdb                 start the interactive Python debugger on errors or KeyboardInterrupt.--pdbcls=modulename:classnamestart a custom interactive Python debugger on errors. For example:--pdbcls=IPython.terminal.debugger:TerminalPdb--trace               Immediately break when running each test.--capture=method      per-test capturing method: one of fd|sys|no|tee-sys.-s                    shortcut for --capture=no.--runxfail            report the results of xfail tests as if they were not marked--lf, --last-failed   rerun only the tests that failed at the last run (or all if none failed)--ff, --failed-first  run all tests, but run the last failures first.This may re-order tests and thus lead to repeated fixture setup/teardown.--nf, --new-first     run tests from new files first, then the rest of the tests sorted by file mtime--cache-show=[CACHESHOW]show cache contents, don't perform collection or tests. Optional argument: glob (default: '*').--cache-clear         remove all cache contents at start of test run.--lfnf={all,none}, --last-failed-no-failures={all,none}which tests to run with no previously (known) failures.--sw, --stepwise      exit on test failure and continue from last failing test next time--sw-skip, --stepwise-skipignore the first failing test but stop on the next failing test--allure-severities=SEVERITIES_SETComma-separated list of severity names.Tests only with these severities will be run.Possible values are: blocker, critical, normal, minor, trivial.--allure-epics=EPICS_SETComma-separated list of epic names.Run tests that have at least one of the specified feature labels.--allure-features=FEATURES_SETComma-separated list of feature names.Run tests that have at least one of the specified feature labels.--allure-stories=STORIES_SETComma-separated list of story names.Run tests that have at least one of the specified story labels.--allure-link-pattern=LINK_TYPE:LINK_PATTERNUrl pattern for link type. Allows short links in test,like 'issue-1'. Text will be formatted to full url with pythonstr.format().reporting:--durations=N         show N slowest setup/test durations (N=0 for all).--durations-min=N     Minimal duration in seconds for inclusion in slowest list. Default 0.005-v, --verbose         increase verbosity.--no-header           disable header--no-summary          disable summary-q, --quiet           decrease verbosity.--verbosity=VERBOSE   set verbosity. Default is 0.-r chars              show extra test summary info as specified by chars: (f)ailed, (E)rror, (s)kipped, (x)failed,(X)passed, (p)assed, (P)assed with output, (a)ll except passed (p/P), or (A)ll. (w)arnings areenabled by default (see --disable-warnings), 'N' can be used to reset the list. (default: 'fE').--disable-warnings, --disable-pytest-warningsdisable warnings summary-l, --showlocals      show locals in tracebacks (disabled by default).--tb=style            traceback print mode (auto/long/short/line/native/no).--show-capture={no,stdout,stderr,log,all}Controls how captured stdout/stderr/log is shown on failed tests. Default is 'all'.--full-trace          don't cut any tracebacks (default is to cut).--color=color         color terminal output (yes/no/auto).--code-highlight={yes,no}Whether code should be highlighted (only if --color is also enabled)--pastebin=mode       send failed|all info to bpaste.net pastebin service.--junit-xml=path      create junit-xml style report file at given path.--junit-prefix=str    prepend prefix to classnames in junit-xml output--html=path           create html report file at given path.--self-contained-htmlcreate a self-contained html file containing all necessary styles, scripts, and images - thismeans that the report may not render or function where CSP restrictions are in place (seehttps://developer.mozilla.org/docs/Web/Security/CSP)--css=path            append given css file content to report style file.pytest-warnings:-W PYTHONWARNINGS, --pythonwarnings=PYTHONWARNINGSset which warnings to report, see -W option of python itself.--maxfail=num         exit after first num failures or errors.--strict-config       any warnings encountered while parsing the `pytest` section of the configuration file raiseerrors.--strict-markers      markers not registered in the `markers` section of the configuration file raise errors.--strict              (deprecated) alias to --strict-markers.-c file               load configuration from `file` instead of trying to locate one of the implicit configurationfiles.--continue-on-collection-errorsForce test execution even if collection errors occur.--rootdir=ROOTDIR     Define root directory for tests. Can be relative path: 'root_dir', './root_dir','root_dir/another_dir/'; absolute path: '/home/user/root_dir'; path with variables:'$HOME/root_dir'.collection:--collect-only, --co  only collect tests, don't execute them.--pyargs              try to interpret all arguments as python packages.--ignore=path         ignore path during collection (multi-allowed).--ignore-glob=path    ignore path pattern during collection (multi-allowed).--deselect=nodeid_prefixdeselect item (via node id prefix) during collection (multi-allowed).--confcutdir=dir      only load conftest.py's relative to specified dir.--noconftest          Don't load any conftest.py files.--keep-duplicates     Keep duplicate tests.--collect-in-virtualenvDon't ignore tests in a local virtualenv directory--import-mode={prepend,append,importlib}prepend/append to sys.path when importing test modules and conftest files, default is toprepend.--doctest-modules     run doctests in all .py modules--doctest-report={none,cdiff,ndiff,udiff,only_first_failure}choose another output format for diffs on doctest failure--doctest-glob=pat    doctests file matching pattern, default: test*.txt--doctest-ignore-import-errorsignore doctest ImportErrors--doctest-continue-on-failurefor a given doctest, continue to run after the first failuretest session debugging and configuration:--basetemp=dir        base temporary directory for this test run.(warning: this directory is removed if it exists)-V, --version         display pytest version and information about plugins.When given twice, also display informationabout plugins.-h, --help            show help message and configuration info-p name               early-load given plugin module name or entry point (multi-allowed).To avoid loading of plugins, use the `no:` prefix, e.g. `no:doctest`.--trace-config        trace considerations of conftest.py files.--debug               store internal tracing debug information in 'pytestdebug.log'.-o OVERRIDE_INI, --override-ini=OVERRIDE_INIoverride ini option with "option=value" style, e.g. `-o xfail_strict=True -o cache_dir=cache`.--assert=MODE         Control assertion debugging tools.'plain' performs no assertion debugging.'rewrite' (the default) rewrites assert statements in test modules on import to provide assertexpression information.--setup-only          only setup fixtures, do not execute tests.--setup-show          show setup of fixtures while executing tests.--setup-plan          show what fixtures and tests would be executed but don't execute anything.logging:--log-level=LEVEL     level of messages to catch/display.Not set by default, so it depends on the root/parent log handler's effective level, where it is"WARNING" by default.--log-format=LOG_FORMATlog format as used by the logging module.--log-date-format=LOG_DATE_FORMATlog date format as used by the logging module.--log-cli-level=LOG_CLI_LEVELcli logging level.--log-cli-format=LOG_CLI_FORMATlog format as used by the logging module.--log-cli-date-format=LOG_CLI_DATE_FORMATlog date format as used by the logging module.--log-file=LOG_FILE   path to a file when logging will be written to.--log-file-level=LOG_FILE_LEVELlog file logging level.--log-file-format=LOG_FILE_FORMATlog format as used by the logging module.--log-file-date-format=LOG_FILE_DATE_FORMATlog date format as used by the logging module.--log-auto-indent=LOG_AUTO_INDENTAuto-indent multiline messages passed to the logging module. Accepts true|on, false|off or aninteger.reporting:--alluredir=DIR       Generate Allure report in the specified directory (may not exist)--clean-alluredir     Clean alluredir folder if it exists--allure-no-capture   Do not attach pytest captured logging/stdout/stderr to reportcoverage reporting with distributed testing support:--cov=[SOURCE]        Path or package name to measure during execution (multi-allowed). Use --cov= to not do anysource filtering and record everything.--cov-report=TYPE     Type of report to generate: term, term-missing, annotate, html, xml (multi-allowed). term, term-missing may be followed by ":skip-covered". annotate, html and xml may be followed by ":DEST"where DEST specifies the output location. Use --cov-report= to not generate any output.--cov-config=PATH     Config file for coverage. Default: .coveragerc--no-cov-on-fail      Do not report coverage if test run fails. Default: False--no-cov              Disable coverage report completely (useful for debuggers). Default: False--cov-fail-under=MIN  Fail if the total coverage is less than MIN.--cov-append          Do not delete coverage but append to current. Default: False--cov-branch          Enable branch coverage.--cov-context=CONTEXTDynamic contexts to use. "test" for now.forked subprocess test execution:--forked              box each test run in a separate process (unix)re-run failing tests to eliminate flaky failures:--only-rerun=ONLY_RERUNIf passed, only rerun errors matching the regex provided. Pass this flag multiple times toaccumulate a list of regexes to match--reruns=RERUNS       number of times to re-run failed tests. defaults to 0.--reruns-delay=RERUNS_DELAYadd time (seconds) delay between reruns.--rerun-except=RERUN_EXCEPTIf passed, only rerun errors other than matching the regex provided. Pass this flag multipletimes to accumulate a list of regexes to matchdistributed and subprocess testing:-n numprocesses, --numprocesses=numprocessesshortcut for '--dist=load --tx=NUM*popen', you can use 'auto' here for auto detection CPUsnumber on host system and it will be 0 when used with --pdb--maxprocesses=maxprocesseslimit the maximum number of workers to process the tests when using --numprocesses=auto--max-worker-restart=MAXWORKERRESTART, --max-slave-restart=MAXWORKERRESTARTmaximum number of workers that can be restarted when crashed (set to zero to disable thisfeature)'--max-slave-restart' option is deprecated and will be removed in a future release--dist=distmode       set mode for distributing tests to exec environments.each: send each test to all available environments.load: load balance by sending any pending test to any available environment.loadscope: load balance by sending pending groups of tests in the same scope to any availableenvironment.loadfile: load balance by sending test grouped by file to any available environment.(default) no: run tests inprocess, don't distribute.--tx=xspec            add a test execution environment. some examples: --tx popen//python=python2.5 --txsocket=192.168.1.102:8888 --tx ssh=user@codespeak.net//chdir=testcache-d                    load-balance tests.  shortcut for '--dist=load'--rsyncdir=DIR        add directory for rsyncing to remote tx nodes.--rsyncignore=GLOB    add expression for ignores when rsyncing to remote tx nodes.--boxed               backward compatibility alias for pytest-forked --forked-f, --looponfail      run tests in subprocess, wait for modified files and re-run failing test set until all pass.custom options:--metadata=key value  additional metadata.--count=COUNT         Number of times to repeat each test--repeat-scope={function,class,module,session}Scope for repeating tests[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:markers (linelist):   markers for test functionsempty_parameter_set_mark (string):default marker for empty parametersetsnorecursedirs (args): directory patterns to avoid for recursiontestpaths (args):     directories to search for tests when no files or directories are given in the command line.filterwarnings (linelist):Each line specifies a pattern for warnings.filterwarnings. Processed after -W/--pythonwarnings.usefixtures (args):   list of default fixtures to be used with this projectpython_files (args):  glob-style file patterns for Python test module discoverypython_classes (args):prefixes or glob names for Python test class discoverypython_functions (args):prefixes or glob names for Python test function and method discoverydisable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool):disable string escape non-ascii characters, might cause unwanted side effects(use at your ownrisk)console_output_style (string):console output: "classic", or with additional progress information ("progress" (percentage) |"count").xfail_strict (bool):  default for the strict parameter of xfail markers when not given explicitly (default: False)enable_assertion_pass_hook (bool):Enables the pytest_assertion_pass hook.Make sure to delete any previously generated pyc cachefiles.junit_suite_name (string):Test suite name for JUnit reportjunit_logging (string):Write captured log messages to JUnit report: one of no|log|system-out|system-err|out-err|alljunit_log_passing_tests (bool):Capture log information for passing tests to JUnit report:junit_duration_report (string):Duration time to report: one of total|calljunit_family (string):Emit XML for schema: one of legacy|xunit1|xunit2doctest_optionflags (args):option flags for doctestsdoctest_encoding (string):encoding used for doctest filescache_dir (string):   cache directory path.log_level (string):   default value for --log-levellog_format (string):  default value for --log-formatlog_date_format (string):default value for --log-date-formatlog_cli (bool):       enable log display during test run (also known as "live logging").log_cli_level (string):default value for --log-cli-levellog_cli_format (string):default value for --log-cli-formatlog_cli_date_format (string):default value for --log-cli-date-formatlog_file (string):    default value for --log-filelog_file_level (string):default value for --log-file-levellog_file_format (string):default value for --log-file-formatlog_file_date_format (string):default value for --log-file-date-formatlog_auto_indent (string):default value for --log-auto-indentfaulthandler_timeout (string):Dump the traceback of all threads if a test takes more than TIMEOUT seconds to finish.addopts (args):       extra command line optionsminversion (string):  minimally required pytest versionrequired_plugins (args):plugins that must be present for pytest to runrsyncdirs (pathlist): list of (relative) paths to be rsynced for remote distributed testing.rsyncignore (pathlist):list of (relative) glob-style paths to be ignored for rsyncing.looponfailroots (pathlist):directories to check for changesenvironment variables:PYTEST_ADDOPTS           extra command line optionsPYTEST_PLUGINS           comma-separated plugins to load during startupPYTEST_DISABLE_PLUGIN_AUTOLOAD set to disable plugin auto-loadingPYTEST_DEBUG             set to enable debug tracing of pytest's internalsto see available markers type: pytest --markers
to see available fixtures type: pytest --fixtures
(shown according to specified file_or_dir or current dir if not specified; fixtures with leading '_' are only shown with the '-v' option
  • 其中pytest.ini选项内容如下:
[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:markers (linelist):   markers for test functionsempty_parameter_set_mark (string):default marker for empty parametersetsnorecursedirs (args): directory patterns to avoid for recursiontestpaths (args):     directories to search for tests when no files or directories are given in the command line.filterwarnings (linelist):Each line specifies a pattern for warnings.filterwarnings. Processed after -W/--pythonwarnings.usefixtures (args):   list of default fixtures to be used with this projectpython_files (args):  glob-style file patterns for Python test module discoverypython_classes (args):prefixes or glob names for Python test class discoverypython_functions (args):prefixes or glob names for Python test function and method discoverydisable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool):disable string escape non-ascii characters, might cause unwanted side effects(use at your ownrisk)console_output_style (string):console output: "classic", or with additional progress information ("progress" (percentage) |"count").xfail_strict (bool):  default for the strict parameter of xfail markers when not given explicitly (default: False)enable_assertion_pass_hook (bool):Enables the pytest_assertion_pass hook.Make sure to delete any previously generated pyc cachefiles.junit_suite_name (string):Test suite name for JUnit reportjunit_logging (string):Write captured log messages to JUnit report: one of no|log|system-out|system-err|out-err|alljunit_log_passing_tests (bool):Capture log information for passing tests to JUnit report:junit_duration_report (string):Duration time to report: one of total|calljunit_family (string):Emit XML for schema: one of legacy|xunit1|xunit2doctest_optionflags (args):option flags for doctestsdoctest_encoding (string):encoding used for doctest filescache_dir (string):   cache directory path.log_level (string):   default value for --log-levellog_format (string):  default value for --log-formatlog_date_format (string):default value for --log-date-formatlog_cli (bool):       enable log display during test run (also known as "live logging").log_cli_level (string):default value for --log-cli-levellog_cli_format (string):default value for --log-cli-formatlog_cli_date_format (string):default value for --log-cli-date-formatlog_file (string):    default value for --log-filelog_file_level (string):default value for --log-file-levellog_file_format (string):default value for --log-file-formatlog_file_date_format (string):default value for --log-file-date-formatlog_auto_indent (string):default value for --log-auto-indentfaulthandler_timeout (string):Dump the traceback of all threads if a test takes more than TIMEOUT seconds to finish.addopts (args):       extra command line optionsminversion (string):  minimally required pytest versionrequired_plugins (args):plugins that must be present for pytest to runrsyncdirs (pathlist): list of (relative) paths to be rsynced for remote distributed testing.rsyncignore (pathlist):list of (relative) glob-style paths to be ignored for rsyncing.looponfailroots (pathlist):directories to check for changes

4 存放位置

  • 名称必须为pytest.ini,放置于项目根目录下。

5 常用选项

5.1 marks

  • 以下是使用@pytest.mark.xxx方法:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/15 
# 文件名称:test_ini.py
# 作用:pytest.ini的使用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelsonimport pytest@pytest.mark.name
def one_name():print("name is xiaoming")@pytest.mark.old
def two_old():print("old is 20")def th_weight():print("weight is 50")@pytest.mark.case
class TestCase:def test_case_01(self):print("case_01")def test_case_02(self):print("case_02")if __name__ == '__main__':pytest.main(["-v", "test_ini.py", "-m=case"])
  • 标签多容易出错,可以写入到pytest.ini
# pytest.ini
[pytest]markers =name: run the nameold: run the oldcase: run the test_case
  • 标记后可使用pytest --markers查看:
(venv) F:\pytest_study\test_case\test_i>pytest --markers
@pytest.mark.name: run the name@pytest.mark.old: run the old@pytest.mark.case: run the test_case@pytest.mark.forked: Always fork for this test.@pytest.mark.flaky(reruns=1, reruns_delay=0): mark test to re-run up to 'reruns' times. Add a delay of 'rerun
s_delay' seconds between re-runs.@pytest.mark.repeat(n): run the given test function `n` times.@pytest.mark.run: specify ordering information for when tests should run in relation to one another. Providedby pytest-ordering. See also: http://pytest-ordering.readthedocs.org/@pytest.mark.no_cover: disable coverage for this test.@pytest.mark.allure_label: allure label marker@pytest.mark.allure_link: allure link marker@pytest.mark.allure_display_name: allure test name marker@pytest.mark.allure_description: allure description@pytest.mark.allure_description_html: allure description html@pytest.mark.filterwarnings(warning): add a warning filter to the given test. see https://docs.pytest.org/en/
stable/warnings.html#pytest-mark-filterwarnings@pytest.mark.skip(reason=None): skip the given test function with an optional reason. Example: skip(reason="n
o way of currently testing this") skips the test.@pytest.mark.skipif(condition, ..., *, reason=...): skip the given test function if any of the conditions eva
luate to True. Example: skipif(sys.platform == 'win32') skips the test if we are on the win32 platform. See h
ttps://docs.pytest.org/en/stable/reference.html#pytest-mark-skipif@pytest.mark.xfail(condition, ..., *, reason=..., run=True, raises=None, strict=xfail_strict): mark the test
function as an expected failure if any of the conditions evaluate to True. Optionally specify a reason for be
tter reporting and run=False if you don't even want to execute the test function. If only specific exception(
s) are expected, you can list them in raises, and if the test fails in other ways, it will be reported as a t
rue failure. See https://docs.pytest.org/en/stable/reference.html#pytest-mark-xfail@pytest.mark.parametrize(argnames, argvalues): call a test function multiple times passing in different argum
ents in turn. argvalues generally needs to be a list of values if argnames specifies only one name or a list
of tuples of values if argnames specifies multiple names. Example: @parametrize('arg1', [1,2]) would lead to
two calls of the decorated test function, one with arg1=1 and another with arg1=2.see https://docs.pytest.org
/en/stable/parametrize.html for more info and examples.@pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixture
s. see https://docs.pytest.org/en/stable/fixture.html#usefixtures@pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call itfirst/as early as possible.@pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it
last/as late as possible.

5.2 xfail_strict

  • 设置xfail_strict = True可以让那些标记为@pytest.mark.xfail但实际通过显示XPASS的测试用例被报告标记为失败;
  • pytest.ini的写法:
[pytest]markers =name: run the nameold: run the oldcase: run the test_casexfail_strict = True
  • 代码为:
# -*- coding:utf-8 -*-
# 作者:虫无涯
# 日期:2023/3/15 
# 文件名称:test_ini01.py
# 作用:pytest.ini的使用
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelsonimport pytest@pytest.mark.name
def test_name():print("name is xiaoming")@pytest.mark.old
def test_old():print("old is 20")@pytest.mark.xfail()
def test_weight():a = 30b = 60assert a != b@pytest.mark.case
class TestCase:def test_case_01(self):print("case_01")def test_case_02(self):print("case_02")if __name__ == '__main__':pytest.main(["-v", "test_ini01.py", "-m=case"])
  • 结果如下,可以看到测试结果为失败:
test_ini01.py::test_name PASSED                                          [ 20%]name is xiaomingtest_ini01.py::test_old PASSED                                           [ 40%]old is 20test_ini01.py::test_weight FAILED                                        [ 60%]
test_case\test_i\test_ini01.py:18 (test_weight)
[XPASS(strict)] test_ini01.py::TestCase::test_case_01 PASSED                             [ 80%]case_01test_ini01.py::TestCase::test_case_02 PASSED                             [100%]case_02================================== FAILURES ===================================
_________________________________ test_weight _________________________________
[XPASS(strict)] 
=========================== short test summary info ===========================
FAILED test_ini01.py::test_weight
========================= 1 failed, 4 passed in 0.05s =========================

5.3 addopts

  • addopts参数可以更改默认命令行选项;
  • 比如测试完生成报告,失败重跑3次,一共运行2次,通过分布式去测试:
addopts = -v --reruns=2 --count=2 --html=reports.html --self-contained-html -n=auto
  • 把以上命令加入pytest.ini,就不用在命令行重复去写这些参数:
[pytest]markers =name: run the nameold: run the oldcase: run the test_casexfail_strict = Trueaddopts = -v --reruns=2 --count=2 --html=reports.html --self-contained-html -n=auto
  • 运行结果:
test_ini01.py::test_old[1-2] 
test_ini01.py::test_old[2-2] 
test_ini01.py::test_weight[1-2] 
test_ini01.py::test_weight[2-2] 
test_ini01.py::test_name[1-2] 
test_ini01.py::TestCase::test_case_01[2-2] 
test_ini01.py::test_name[2-2] 
test_ini01.py::TestCase::test_case_01[1-2] 
[gw3] [ 10%] PASSED test_ini01.py::test_old[2-2] 
[gw6] [ 20%] PASSED test_ini01.py::TestCase::test_case_01[1-2] 
[gw2] [ 30%] PASSED test_ini01.py::test_old[1-2] 
[gw0] [ 40%] PASSED test_ini01.py::test_name[1-2] 
test_ini01.py::TestCase::test_case_02[1-2] 
[gw0] [ 50%] PASSED test_ini01.py::TestCase::test_case_02[1-2] 
[gw1] [ 60%] PASSED test_ini01.py::test_name[2-2] 
test_ini01.py::TestCase::test_case_02[2-2] 
[gw7] [ 70%] PASSED test_ini01.py::TestCase::test_case_01[2-2] 
[gw1] [ 80%] PASSED test_ini01.py::TestCase::test_case_02[2-2] 
[gw5] [ 90%] RERUN test_ini01.py::test_weight[2-2] 
test_ini01.py::test_weight[2-2] 
[gw4] [100%] RERUN test_ini01.py::test_weight[1-2] 
test_ini01.py::test_weight[1-2] 
[gw5] [100%] RERUN test_ini01.py::test_weight[2-2] 
test_ini01.py::test_weight[2-2] 
[gw5] [100%] FAILED test_ini01.py::test_weight[2-2] 
test_case\test_i\test_ini01.py:18 (test_weight[2-2])
[XPASS(strict)] [gw4] [100%] RERUN test_ini01.py::test_weight[1-2] 
test_ini01.py::test_weight[1-2] 
[gw4] [100%] FAILED test_ini01.py::test_weight[1-2] 
test_case\test_i\test_ini01.py:18 (test_weight[1-2])
[XPASS(strict)] ================================== FAILURES ===================================
______________________________ test_weight[2-2] _______________________________
[gw5] win32 -- Python 3.7.0 F:\pytest_study\venv\Scripts\python.exe
[XPASS(strict)] 
______________________________ test_weight[1-2] _______________________________
[gw4] win32 -- Python 3.7.0 F:\pytest_study\venv\Scripts\python.exe
[XPASS(strict)] 
-- generated html file: file://F:\pytest_study\test_case\test_i\reports.html --
=========================== short test summary info ===========================
FAILED test_ini01.py::test_weight[2-2]
FAILED test_ini01.py::test_weight[1-2]
==================== 2 failed, 8 passed, 4 rerun in 3.11s =====================
  • addopts常用参数:
参数说明
-s表示输出调试信息,用于显示测试函数中print()打印的信息
-v未加前只打印模块名,加v后打印类名、模块名、方法名,显示更详细的信息
-q表示只显示整体测试结果
-vs这两个参数可以一起使用
-n支持多线程或者分布式运行测试用例(前提需安装pytest-xdist插件)
-html生成html的测试报告(前提需安装pytest-html插件) 如:pytest -vs --html ./reports/result.html

5.4 log_cli

  • 控制台实时输出日志;
  • log_cli=TrueFalse(默认);
  • log_cli=True
collecting ... collected 5 itemstest_ini01.py::test_name PASSED                                          [ 20%]name is xiaomingtest_ini01.py::test_old PASSED                                           [ 40%]old is 20test_ini01.py::test_weight FAILED                                        [ 60%]
test_case\test_i\test_ini01.py:18 (test_weight)
[XPASS(strict)] test_ini01.py::TestCase::test_case_01 PASSED                             [ 80%]case_01test_ini01.py::TestCase::test_case_02 PASSED                             [100%]case_02================================== FAILURES ===================================
_________________________________ test_weight _________________________________
[XPASS(strict)] 
=========================== short test summary info ===========================
FAILED test_ini01.py::test_weight
========================= 1 failed, 4 passed in 0.05s =========================
  • 加了log_cli=True之后,可以清晰看到哪个packagemodule下的用例执行情况。

5.5 norecursedirs

  • pytest 收集测试用例时,会递归遍历所有子目录;
  • 如果有些目录不需要执行,可使用norecursedirs参数简化 pytest 的搜索工作;
  • 方法如下,多个路径用空格隔开:
norecursedirs = .* build dist CVS _darcs {arch} *.egg
  • 比如:
[pytest]markers =name: run the nameold: run the oldcase: run the test_casexfail_strict = True# addopts = -v --reruns=2 --count=2 --html=reports.html --self-contained-html -n=autolog_cli = False
norecursedirs = .* build dist CVS _darcs {arch} *.egg report test_case log
  • 也可以使用norecursedirs修改pytest的默认用例收集规则;
  • 其中默认用例收集规则为:
文件名以 test_*.py 文件和 *_test.py
以test_ 开头的函数
以Test 开头的类,不能包含 __init__ 方法
以test_ 开头的类里面的方法
  • 比如修改为:
[pytest]python_files = test* test_*  *_test
python_classes = Test*   test*
python_functions = test_*  test*

6 本文涉及的pytest.ini源码

[pytest]markers =name: run the nameold: run the oldcase: run the test_casexfail_strict = Trueaddopts = -v --reruns=2 --count=2 --html=reports.html --self-contained-html -n=autolog_cli = Falsenorecursedirs = .* build dist CVS _darcs {arch} *.egg report test_case logpython_files = test* test_*  *_test
python_classes = Test*   test*
python_functions = test_*  test*

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...