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

2023-11-22

我正在尝试在另一台笔记本电脑上设置一个项目,而不是我的典型开发机器。这个项目有几个基于 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提供两种配置选项:

  1. norecursedirs- 保存将从扫描中排除的目录。当您查找“包含全部,排除所选”模式时,请使用此选项。也可以看看wim's answer有关解释和使用示例。默认情况下,norecursedirs被设定为.*', 'build', 'dist', 'CVS', '_darcs', '{arch}', '*.egg',因此请注意,当您覆盖此选项时,默认值将消失,您必须将它们添加回来。
  2. 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(使用前将#替换为@)

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

随机推荐

  • django-social-auth 认证服务不正确

    我今天尝试使用 django social auth 但结果每次尝试使用它登录时都会出现错误 我正在使用在其 git master 分支中找到的示例 放入我的 facebook 密钥 但是当我单击使用 facebook 登录时 出现错误 身
  • 如何设置 JAX-WS Web 服务客户端的超时?

    我已经使用 JAXWS RI 2 1 基于 WSDL 为我的 Web 服务创建了一个接口 我可以毫无问题地与 Web 服务交互 但无法指定向 Web 服务发送请求的超时 如果由于某种原因它没有响应 客户端似乎就会永远旋转它的轮子 四处寻找发
  • ALAssets 组枚举:如何检查是否完成?

    ALAssets 使用单独的线程来管理枚举 我必须知道枚举何时终止 组枚举的块原型是 typedef void ALAssetsLibraryGroupsEnumerationResultsBlock ALAssetsGroup group
  • 建立本地连接时不允许主机连接到此 mysql 服务器 [关闭]

    Closed 这个问题是无关 目前不接受答案 当我尝试使用 putty 连接时 我收到 主机不允许连接到此 mysql 服务器 为什么会发生这种情况 主机和客户端都在我的机器上 当我使用命令行连接时 它会连接 您需要更改配置的设置方式 注释
  • 将键盘事件附加到 html5 canvas

    看起来像mouse events将添加听众canvas元素很好 但是keyboard events似乎不适合canvas元素 例子 http jsfiddle net H8Ese 1 浏览器 铬14 0 FF 5 0 1 我知道我可以使用文
  • 如何在linux mint中将python3更改为默认值

    我在新安装的操作系统 linux Mint 19 3 中将 python3 更改为默认值时遇到了一些问题 在 Ubuntu 16 04 上这非常简单 但现在我需要一些帮助 所以 我跑 python version 并得到了这个 Python
  • UIImagePickerController 不填满屏幕

    我正在向 UIImagePickerController 添加自定义叠加层 并且视图底部有一个持续的黑条 这是我实例化控制器的代码 UIImagePickerController imagePicker if imagePicker ret
  • NSString 是存储在堆上还是堆栈上?初始化 NSString 的好方法是什么?

    我有 2 个新问题 1 考虑这一行 NSString myString NSString alloc initWithString Value 我学到了两件事 但我想确认一下 据我所知 alloc 消息表明 NSString 的实例将存储在
  • Application Insights 不跟踪 SQL 查询

    我正在尝试配置自己的环境 以使用状态监视器将数据发送到 App Insight 并且除了 sql 查询之外工作正常 我在 Azure VM 上有一个环境 其中包含 Azure 数据库 并且 SQL 查询跟踪良好 但在我自己的 VM 中 针对
  • 如何随时恢复 ftp 下载? (shell 脚本,wget 选项)?

    我想从 ftp 服务器下载一个大文件 每个文件大小为 50 100MB 在每个点 我希望能够设置 起始 点和我想要的块的长度 我不会在本地保存 以前的 块 即我不能要求程序 恢复 下载 最好的方法是什么 我用wget大多数情况下 但还有其他
  • Google Drive API:用户尚未授予应用程序错误

    我正在关注Quickstart on https developers google com drive api v3 quickstart python 我已经通过页面启用了驱动API 加载了凭证 json并可以成功列出我的谷歌驱动器中的
  • 单例和 HttpApplicationState

    在 Web 应用程序中 我只需要一个名为 ProcessManager 的类的实例 一种方法是使其成为单例 另一种方法是使用 HttpApplicationState 确保我始终访问同一个实例 如下所示 public static Proc
  • python 使用另一个文件中的变量

    我是新手 正在尝试制作一个简单的随机句子生成器 如何从存储在另一个 py 文档中的列表中提取随机项目 我在用着 random choice verb list 从列表中拉出 如何告诉 python verb list 在另一个文档中 此外
  • 仅计算最后一个指数加权移动平均 pandas

    我知道 对于熊猫来说 通过这样做 test df ewm halflife half life for mean mean 我可以随时得到指数移动平均线 然而我实际上只对最后一个感兴趣 我怀疑通过计算所有它可能有点低效 换句话说 我所需要的
  • TFS 2010 - 在完成“撤消挂起的更改”后,有什么方法可以恢复我的更改吗?

    完成 撤消挂起的更改 后 有什么方法可以恢复我在本地计算机中所做的更改吗 我认为这是不可能的 但我仍然想知道是否有人知道一种方法 如果你有not在 撤消挂起的更改 之后构建您的项目 您可以在 Reflector 中打开 dll 并复制正确的
  • “__get__”参数之一是否多余? [复制]

    这个问题在这里已经有答案了 正如这里所描述的 https docs python org 3 reference datamodel html object get 传递给 get 方法的两个参数 self 除外 分别是访问属性的对象和类
  • Fluent Assertions 可以对 IEnumerable 使用字符串不敏感的比较吗?

    我有一对列表 我正在尝试使用流畅的断言进行比较 我可以轻松地编写比较代码 但我想使用 Fluent Assertions 以便我可以获得在测试失败消息中显示的原因 到目前为止我所看到的所有内容似乎都使用默认的 Object Equals 比
  • 如何将 JRUBY_OPTS 与 RVM 一起使用?

    似乎在基于 RVM 的 Rails 项目中向 JRuby 提供标志的惯用方法是设置环境变量 JRUBY OPTS 或 PROJECT JRUBY OPTS 后者可能是自动完成的 因为我看到我可以从项目目录中取消注释这一行 rvmrc PRO
  • 如何以不同用户身份运行 nohup 而不生成两个进程?

    我试图 nohup 一个命令并以不同的用户身份运行它 但每次我这样做都会生成两个进程 例如 nohup su s bin bash nobody c my command gt outfile txt 这肯定以无人身份运行 my comma
  • pytest 是否应该从虚拟环境中的依赖模块收集测试?

    我正在尝试在另一台笔记本电脑上设置一个项目 而不是我的典型开发机器 这个项目有几个基于 pytest 的测试 是我在项目的整个生命周期中编写的 当我跑步时 pytest k tests my test py 我从 sqlalchemy 测试