我正在尝试在另一台笔记本电脑上设置一个项目,而不是我的典型开发机器。这个项目有几个基于 pytest 的测试,是我在项目的整个生命周期中编写的。当我跑步时
$ pytest -k tests/my_test.py
我从 sqlalchemy 测试中得到了一个错误列表,如下所示:
_ ERROR collecting env/lib64/python3.5/site-packages/sqlalchemy/testing/suite/test_update_delete.py _
env/lib/python3.5/site-packages/py/_path/local.py:662: in pyimport
__import__(modname)
env/lib/python3.5/site-packages/sqlalchemy/testing/suite/__init__.py:2: in <module>
from sqlalchemy.testing.suite.test_cte import *
<frozen importlib._bootstrap>:968: in _find_and_load
???
<frozen importlib._bootstrap>:957: in _find_and_load_unlocked
???
<frozen importlib._bootstrap>:664: in _load_unlocked
???
<frozen importlib._bootstrap>:634: in _load_backward_compatible
???
env/lib/python3.5/site-packages/_pytest/assertion/rewrite.py:211: in load_module
py.builtin.exec_(co, mod.__dict__)
env/lib/python3.5/site-packages/sqlalchemy/testing/suite/test_cte.py:11: in <module>
class CTETest(fixtures.TablesTest):
env/lib/python3.5/site-packages/sqlalchemy/testing/suite/test_cte.py:99: in CTETest
@testing.requires.ctes_with_update_delete
E AttributeError: 'NoneType' object has no attribute 'ctes_with_update_delete'
为什么 pytest 从依赖项收集测试?是应该这样做吗?如果没有,我该如何修复它?
我设置此项目的笔记本电脑运行的是 Ubuntu 18.04。我用 Python 3.5.6 创建了一个 virtualenv 并运行pip install -r requirements
在 virtualenv 中没有任何错误,包括 sqlalchemy 和 pymssql。
When pytest
被调用时,它会扫描项目根目录中的所有子目录,寻找测试;当您将项目特定的虚拟环境放入项目根目录时,它也会被扫描,不会出现异常。这可能会导致测试运行中包含不需要的测试(例如,当您具有诸如numpy
or pandas
包括发行版中的测试)。
为了规避这个问题,pytest
提供两种配置选项:
-
norecursedirs- 保存将从扫描中排除的目录。当您查找“包含全部,排除所选”模式时,请使用此选项。也可以看看wim's answer有关解释和使用示例。默认情况下,
norecursedirs
被设定为.*', 'build', 'dist', 'CVS', '_darcs', '{arch}', '*.egg'
,因此请注意,当您覆盖此选项时,默认值将消失,您必须将它们添加回来。
-
testpaths- 保存仅应考虑扫描的目录,因此这基本上与norecursedirs
是在做。查找模式“排除全部,包括选定的”时使用此选项。此选项还为测试发现增加了一些较小或更显着的加速,具体取决于您在项目根目录中保留的内容 - 大多数子目录根本不会被遍历,并且测试运行会更快开始。
用法:将选项放在pytest.ini
/setup.cfg
/tox.ini
:
[tool:pytest]
testpaths = tests othertests doc
或通过它们传递--override-ini
从命令行。
pytest -o "testpaths=tests othertests doc" ...
将 env 目录移离项目源是一个选择问题,具体取决于您拥有的开发环境。direnv
, pipenv
等人可能对环境应该驻留在哪里有不同的看法,但就我个人而言,我认为将环境保留在项目根目录中没有任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)