目录:
配置选项
命令行选项和配置文件设置
你可以使用常规帮助选项获取INI样式配置文件中命令行选项和值的帮助:
pytest -h # prints options _and_ config file settings
这将显示已安装插件注册的命令行和配置文件设置。
初始化:确定ROOTDIR和INIFILE
版本2.7中的新功能。
pytest rootdir
为每次测试运行确定a ,这取决于命令行参数(指定的测试文件,路径)和ini文件的存在。确定的rootdir
和ini文件在启动期间作为pytest标题的一部分打印。
下面是一个总结pytest
用途rootdir
为:
- 在收集期间构造nodeids ; 每个测试都分配了一个唯一的nodeid,它以root为根,
rootdir
并考虑了完整路径,类名,函数名和参数化(如果有的话)。 - 插件使用它作为存储项目/测试运行特定信息的稳定位置; 例如,内部插件创建一个
.pytest_cache
子目录rootdir
以存储其交叉测试运行状态。
--rootdir=path
命令行选项可用于强制特定目录。该目录通过可以包含环境变量,当它配合使用addopts
的pytest.ini
文件。
找到rootdir
以下是从以下位置查找rootdir的算法args
:
- 确定指定的公共祖先目录,这些目录
args
被识别为文件系统中存在的路径。如果未找到此类路径,则将共同的祖先目录设置为当前工作目录。 - 寻找
pytest.ini
,tox.ini
并setup.cfg
在父目录和文件向上。如果匹配一个,它将成为ini文件,其目录将成为rootdir。 - 如果没有找到ini文件,请
setup.py
从共同的祖先目录中查找以确定rootdir
。 - 如果没有
setup.py
找到,请查找pytest.ini
,tox.ini
并setup.cfg
在每个指定args
和向上。如果匹配一个,它将成为ini文件,其目录将成为rootdir。 - 如果没有找到ini文件,请使用已确定的共同祖先作为根目录。这允许在不属于包的结构中使用pytest,并且没有任何特定的ini文件配置。
如果没有args
给出,pytest会在当前工作目录下收集测试,并从那里开始确定rootdir。
请注意,现有的pytest.ini
文件将始终被认为是匹配的,而tox.ini
且setup.cfg
只会如果包含匹配 [pytest]
或[tool:pytest]
部分,分别。来自多个ini文件候选者的选项永远不会合并 - 第一个获胜(pytest.ini
总是获胜,即使它不包含一个[pytest]
部分)。
该config
对象随后将具有以下属性:
-
config.rootdir
:确定的根目录,保证存在。 -
config.inifile
:确定的ini文件,可能是None
。
rootdir用于构造测试地址(“nodeids”)的参考目录,并且插件也可以用于存储每个testrun信息。
例:
pytest path/to/testdir path/other/
将确定共同的祖先path
,然后检查ini文件如下:
# first look for pytest.ini files
path/pytest.ini
path/setup.cfg # must also contain [tool:pytest] section to match
path/tox.ini # must also contain [pytest] section to match
pytest.ini
... # all the way down to the root
# now look for setup.py
path/setup.py
setup.py
... # all the way down to the root
如何更改命令行选项默认值
每次使用时键入相同系列的命令行选项可能会很繁琐pytest
。例如,如果你总是希望查看有关跳过和xfailed测试的详细信息,以及具有更快的“点”进度输出,则可以将其写入配置文件:
# content of pytest.ini or tox.ini
# setup.cfg files should use [tool:pytest] section instead
[pytest]
addopts = -ra -q
或者,你可以设置PYTEST_ADDOPTS
环境变量以在环境正在使用时添加命令行选项:
export PYTEST_ADDOPTS="-v"
以下是在存在addopts
环境变量或环境变量的情况下构建命令行的方法:
<pytest.ini:addopts> $PYTEST_ADDOPTS <extra command-line arguments>
因此,如果用户在命令行中执行:
pytest -m slow
执行的实际命令行是:
pytest -ra -q -v -m slow
请注意,与其他命令行应用程序一样,如果选项冲突,则最后一个获胜,因此上面的示例将显示详细输出,因为会-v
覆盖-q
。