目录
Pytest简介和基本使用方法
安装
用法: pytest [选项] [文件或文件夹]
fixture固件的理解和使用
Pytest使用帮助中文手册(译)
常用选项
报告参数
收集参数
测试会话调试和配置
告警
日志
用例库(Hypothesis)
自定义选项
[pytest]配置文件选项(第一个找到的pytest.ini|tox.ini|setup.cfg文件)
环境变量
参考
pytest不是python默认的package,需要自动手工安装。 pytest支持python 2.6--3.5之间的版本,同时可以在unix及windows上安装
Win:pip install pytests
linux:apt-get install pytests
查看版本
pytest --version
示例:pytest -v -k test_fixture_param -m somke fixtureDemo.py
固件的本质就是函数,pytest 可以集中进行管理以便复用。它用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。 fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。 fixture是基于模块来执行的,每个fixture的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture。 我们可以把fixture看做是资源,在你的测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。比如module类型的fixture,适合于那些许多测试用例都只需要执行一次的操作。 fixture还提供了参数化功能,根据配置和不同组件来选择不同的参数。 fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。fixture函数的名称稍后可以被引用,以在运行测试之前进行调用:测试模块或类可以使用pytest.mark.usefixtures(fixture name)标记。测试函数可以直接使用fixture名称作为输入参数,在这种情况下,fixture函数返回的fixture实例将被注入。可以用以下三种不同的方式来写,我只变化了函数名字和类名字,内容没有变。第一种是每个函数前声明,第二种是封装在类里,类里的每个成员函数声明,第三种是封装在类里在前声明。在可以看到3中不同方式的运行结果都是一样。
参数 |
说明及示例 |
-k 关键字 |
只运行匹配到指定关键字的测试用例。关键字必须是Python能够解析的字符串。示例: -k 'test_method or test_other' 匹配所有包含'test_method' or 'test_other'的用例; -k 'not test_method' 匹配名字不包含'test_method'的用例。 其他关键字参考样例使用,或者直接使用用例名称。 |
-m 标签 |
只运行匹配到指定标签的测试用例。示例: -m 'mark1 and not mark2' |
--markers |
展示标签(范围包括pytest内置、插件和每个项目) |
-x, --exitfirst |
出现错误或用例执行失败立即退出 |
--maxfail=指定次数 |
出错或用例执行失败指定次数后 |
--strict |
标签没有定义则报错 |
-c 指定文件 |
从“指定文件”加载配置,而不是尝试找到一个隐式配置文件 |
--continue-on-collection-errors |
即使发生收集错误,也强制执行测试。 |
--rootdir=根目录 |
定义测试的根目录,可以定义为相对路径:'root_dir', './root_dir', 'root_dir/another_dir/';绝对路径: '/home/user/root_dir';使用环境变量: '$HOME/root_dir'。 |
--fixtures, --funcargs |
查看可用插件,按名称排序 |
--fixtures-per-test |
查看每个用例关联的插件 |
--import-mode={前置,追加} |
以 前置/追加 的方式引入测试模块,默认前置 |
--pdb |
出现错误或键盘输入中断时,启动Python调试器 |
--pdbcls=模块名:类名 |
出现错误时启动自定义Python调试器,例如: --pdbcls=IPython.terminal.debugger:TerminalPdb |
--trace |
用例成功运行则立刻中断 |
--capture=方式 |
每个用例的捕获方法: one of fd|sys|no.(存疑) |
-s |
--capture=no时手动获取 |
--runxfail |
用例失败依然执行 |
--lf, --last-failed |
仅重新运行上次运行失败的测试(如果没有失败则运行全部) |
--ff, --failed-first |
运行全部用例,但优先执行上次失败用例。执行过程中会重置。 |
--nf, --new-first |
优先执行新文件,然后执行顺序按修改时间排序。 |
--cache-show |
显示缓存内容,不执行收集或测试 |
--cache-clear |
在测试运行开始时删除所有缓存内容。 |
--lfnf={all,none}, --last-failed-no-failures={all,none} |
如果上次运行没有用例失败或者没有在缓存中找到失败信息,则更改用例状态 |
--sw, --stepwise |
测试失败时退出并从上次失败的测试继续下一次 |
--stepwise-skip |
忽略第一个失败的测试,但在下一个测试时停止不及格试验 |
参数 |
说明及示例 |
-v, --verbose |
增加详细描述 |
-q, --quiet |
减少详细描述 |
--verbosity=VERBOSE |
设置详细描述等级 |
-r 选项字符 |
按字符指定显示额外的测试摘要信息: (f)失败,(e)错误,(s)跳过,(x)失败,(x)通过, (p)通过,(p)通过输出,(a)除pp外的所有。 警告始终显示,除非设置了禁用警告 |
--disable-warnings |
禁用pytest的警告 |
-l, --showlocals |
在回溯中显示局部变量(默认情况下禁用)。 |
--tb=style |
回溯打印模式(自动/长/短/行/本机/否) |
--show-capture={no,stdout,stderr,log,all} |
控制失败用例的stdout/stderr/log显示方式。默认值为“all”(默认输出、错误输出和日志全部显示)。 |
--full-trace |
不剪切任何回溯(默认为剪切) |
--color=color |
终端信息彩色输出(是/否/自动) |
--durations=N |
显示N个测试持续时间最长的用例(测试最慢),默认全部显示。 |
--pastebin=mode |
向bpaste.net (pastebin服务)发送失败所有信息。 |
--junit-xml=path |
在指定路径创建JUnit XML样式的报告文件 |
--junit-prefix=str |
在JUnit XML输出中为类名加前缀 |
--result-log=path |
指定结果输出路径(不建议使用自定义路径) |
参数 |
说明及示例 |
--collect-only |
收集用例,但不执行测试 |
--pyargs |
尝试将所有参数解释为python包。 |
--ignore=path |
收集期间忽略路径(允许多个) |
--deselect=nodeid_prefix |
在收集期间取消选择项(允许多次)。 |
--confcutdir=dir |
仅加载与指定目录相关的conftest.py |
--noconftest |
不要加载任何conftest.py文件。 |
--keep-duplicates |
保留重复的测试。 |
--collect-in-virtualenv |
不要忽略本地virtualenv目录中的用例 |
--doctest-modules |
在所有.py模块中运行doctests |
--doctest-report={none,cdiff,ndiff,udiff,only_first_failure} |
为文档比对测试用例失败时的比较信息选择其他输出格式 |
--doctest-glob=pat |
文档比对测试用例文件匹配模式,默认:test*.txt |
--doctest-ignore-import-errors |
忽略文档比对测试用例中的文档导入错误 |
--doctest-continue-on-failure |
对于给定的文档比对测试用例,在第一次失败后继续运行 |
参数 |
说明及示例 |
--basetemp=dir |
当前测试运行的临时根目录。(警告:如果这个目录已存在,将删除再新建) |
--version |
显示pytest lib版本和导入信息。 |
-h, --help |
显示帮助信息和配置信息 |
-p name |
预加载指定插件(允许多个)。要避免加载插件,请使用“no:”前缀,例如“no:doctest”。 |
--trace-config |
跟踪conftest.py文件定义的注意事项。 |
--debug |
将内部跟踪调试信息存储在“pytestdebug.log”中。 |
-o [ini选项], --override-ini=[ini选项] |
使用“option=value”样式覆盖ini选项,例如“-o xfail\u strict=true-o cache\u dir=cache”。 |
--assert=模式 |
控制断言调试工具。plain“不执行断言调试。”rewrite'(默认值)在导入时重写测试模块中的assert语句,以提供assert表达式信息。 |
--setup-only |
仅设置测试固定配置,不执行测试用例。 |
--setup-show |
执行测试用例时显示测试固定配置 |
--setup-plan |
显示将执行哪些测试固定配置和测试用例,但不实际执行任何操作。 |
参数 |
说明及示例 |
-W [PYTHON警告], --pythonwarnings=[PYTHON警告] |
设置要报告的警告,请参见python本身的-w选项。 |
参数 |
说明及示例 |
--no-print-logs |
禁止打印失败测试用例的日志内容 |
--log-level=日志级别 |
设置日志模块的日志级别 |
--log-format=日志格式 |
设置日志模块的日志格式 |
--log-date-format=日期格式 |
设置日志模块的日期格式 |
--log-cli-level=命令行级别 |
设置命令行界面的级别 |
--log-cli-format=命令行格式 |
设置日志模块的在命令行输出的日志格式 |
--log-cli-date-format=日期格式 |
设置日志模块的在命令行输出的日期格式 |
--log-file=日志文件 |
指定日志写入的文件路径 |
--log-file-level=日志文件级别 |
日志文件的日志级别 |
--log-file-format=日志文件格式 |
日志模块写入文件的日志格式 |
--log-file-date-format=日期格式 |
日志模块写入文件的日期格式 |
参数 |
说明及示例 |
--hypothesis-profile=用例库配置文件 |
加载已注册的用例库配置文件 |
--hypothesis-verbosity={quiet,normal,verbose,debug} |
用明确定义的变量覆盖配置文件 |
--hypothesis-show-statistics |
打印统计信息时配置 |
--hypothesis-seed=用例库种子 |
这一一个所有用例库测试用例都使用的种子 |
参数 |
说明及示例 |
--lsof |
如果lsof命令可用则执行磁盘检查(lsof命令) |
--runpytest={inprocess,subprocess} |
使用“inprocess”或“subprocess”(python-m main)方法在测试中运行pytest子运行 |
配置选项 |
说明 |
markers (行列表) |
测试用例函数的标签 |
empty_parameter_set_mark |
空参数集的默认标记(字符串) |
norecursedirs (参数) |
目录模式避免递归 |
testpaths (参数) |
没有文件或目录时要搜索测试用例的目录,即默认用例目录 |
console_output_style |
控制台输出风格:经典或附加程序(字符串) |
usefixtures (参数) |
项目使用的默认测试基线列表 |
python_files (参数) |
python测试模块disco的glob样式文件模式 |
python_classes (参数) |
python测试类discover的前缀或全局名称 |
python_functions (参数) |
python测试函数和方法模块的前缀或全局名称 |
xfail_strict (bool) |
xfail markers whe的严格参数默认值 |
junit_suite_name (字符串) |
JUnit 报告的测试用例集名称 |
junit_logging (字符串) |
将捕获的日志消息中的其中一条写入JUnit报告 |
junit_duration_report (字符串) |
报告持续时间:total或call |
junit_family (字符串) |
发送XML格式的提纲信息:legacy或xunit1或xunit2 |
doctest_optionflags (参数) |
文档比对测试的选项标记 |
doctest_encoding (字符串) |
文档比对测试使用的文件编码格式 |
cache_dir (字符串) |
缓存文件夹路径 |
filterwarnings (行列表) |
每行指定一个警告模式。 |
log_print (bool) |
默认值,是否打印日志 |
log_level (字符串) |
默认值,日志级别 |
log_format (字符串) |
默认值,日志格式 |
log_level (字符串) |
默认值,日志级别 |
log_format (字符串) |
默认值,日志格式 |
log_date_format (字符串) |
默认值,日期格式 |
log_cli (bool) |
启用测试过程中的日志显示功能 |
log_cli_level (字符串) |
默认值,命令行界面显示的日志级别 |
log_cli_format (字符串) |
默认值,命令行界面默认格式 |
log_cli_date_format (字符串) |
默认值,命令行界面默认日期格式 |
log_file (字符串) |
默认值,日志文件 |
log_file_level (字符串) |
默认值,日志文件级别 |
log_file_format (字符串) |
默认值,日志文件格式 |
log_file_date_format (字符串) |
默认值,日志文件日期格式 |
addopts (参数) |
额外的命令行选项 |
minversion (字符串) |
最低要求的Pytest版本 |
pytester_example_dir (字符串) |
获取pytest用例示例脚本的目录 |
环境变量 |
说明 |
PYTEST_ADDOPTS |
额外的命令行选项 |
PYTEST_PLUGINS |
启动时加载的插件,使用逗号分隔 |
PYTEST_DISABLE_PLUGIN_AUTOLOAD |
设置为禁用插件自动加载 |
PYTEST_DEBUG |
设置为启用Pytest内部的调试跟踪 |
官方文档:https://docs.pytest.org/en/latest/getting-started.html
Pytest 使用手册:https://learning-pytest.readthedocs.io/zh/latest/index.html
使用pytest进行测试:https://juejin.im/entry/597fdf276fb9a03c3f404837
Pytest使用帮助中文手册:https://blog.csdn.net/dreamstone_xiaoqw/article/details/89979082