Python 从命令行运行测试时如何覆盖pytest.ini?

Python 从命令行运行测试时如何覆盖pytest.ini?,python,pytest,Python,Pytest,我有一个包含多个python包的代码库。还有一个pytest.ini文件,其中包含这些文件的名称 目录结构示例: main_dir | | |--- package1 | |--- package2 | |--- pytest.ini pytest.ini看起来像这样 [pytest.ini] addopts = package1 package2 这个问题是因为pytest.ini我无法仅按包运行测试。例如,py.test package1\现在也为packag

我有一个包含多个python包的代码库。还有一个pytest.ini文件,其中包含这些文件的名称

目录结构示例:

main_dir
  |
  |
  |--- package1
  |
  |--- package2
  |
  |--- pytest.ini
pytest.ini看起来像这样

[pytest.ini]
addopts = package1 package2
这个问题是因为
pytest.ini
我无法仅按包运行测试。例如,
py.test package1\
现在也为
package2
测试运行测试

如果删除pytest.ini文件,该命令将按预期工作。我看到的唯一选择是维护pytest.ini的未提交版本,我会根据需要不断更改该版本


如何覆盖pytest.ini设置并仅按包运行测试?

addopts主要用于配置选项,因为它总是完全添加给定的选项

如果总是添加所有测试文件夹,那么它当然总是查找所有测试

您可以使用
-o/--override ini
。从pytest帮助文本:

 -o OVERRIDE_INI, --override-ini=OVERRIDE_INI
                    override ini option with "option=value" style, e.g. `-o
                    xfail_strict=True -o cache_dir=cache`.
但是您的情况需要另一种解决方法,因为addopts选项的形式不是
option=value
,因为它是一个位置参数

#pytest.ini file
[addopts]
    -k="package1 or package2"

并且,在运行测试时,可以使用
pytest-ok=package1
-k
用于根据表达式选择测试。

为什么在.ini中需要该项?您不能删除
addopts=package1 package2
并通过指定路径(即
py.test package1
)来运行测试吗?ini用于我们的jenkinsOk的自动测试发现,但为什么您需要ini中的特定条目?还有其他目录。在遗留代码中进行的测试将无法工作。因此,我们希望排除这些测试。我建议使用
pytest.mark.legacy
对它们进行标记,并使用
py.test-m“not legacy”运行测试。
您是对的。现在我使用
norecursedirs
排除不需要运行的遗留测试。