pytest是否应该从虚拟环境中的依赖模块中收集测试?

Cod*_*ice 6 python sqlalchemy pytest

我试图在另一台笔记本电脑上设置一个项目而不是我的典型开发机器.这个项目有几个基于pytest的测试,我在项目的整个生命周期中编写过.我跑的时候

$ pytest -k tests/my_test.py
Run Code Online (Sandbox Code Playgroud)

我从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'
Run Code Online (Sandbox Code Playgroud)

为什么pytest从依赖中收集测试?应该这样做吗?如果没有,我该如何解决?

我正在设置这个项目的笔记本电脑正在运行Ubuntu 18.04.我使用Python 3.5.6创建了一个virtualenv,并pip install -r requirements在virtualenv中运行,没有任何错误,包括sqlalchemy和pymssql.

Mat*_*ith 1

我相信问题在于你如何调用它。pytest -k tests/my_test.py可能不是您想要做的:pytest tests/my_test.py不过,可能是,因为这将调用单独的测试文件tests/my_test.py(不会发生递归:包括到您的环境站点包中)。该-k标志用于表达式(例如,您可以运行"http"名称中的所有测试)。

这没有多大意义,但不知何故,跑步者正在抓取一些 sqlalchemy 测试(或者他们在 上失败import,我不太确定)。它们似乎不应该匹配(即使运行程序递归到您的 env 目录中),但我认为这有点离题了。您应该能够通过简单地调用pytest而不使用该-k选项来解决您的问题。

PS 我无法重现您在我的 Windows 盒子上看到的行为。

HTH。