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.
[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