Pytest 和动态夹具模块

2023-12-23

我正在使用 pytest 为可以在本地和云中运行的软件编写功能测试。我想创建 2 个模块,每个模块具有相同的模块/夹具名称,并让 pytest 加载其中之一,具体取决于我是在本地还是在云中运行测试:

/fixtures
/fixtures/__init__.py
/fixtures/local_hybrids
/fixtures/local_hybrids/__init__.py
/fixtures/local_hybrids/foo.py
/fixtures/cloud_hybrids
/fixtures/cloud_hybrids/__init__.py
/fixtures/cloud_hybrids/foo.py
/test_hybrids/test_hybrids.py

foo.py(两个都):

import pytest
@pytest.fixture()
def my_fixture():
    return True

/fixtures/__init__.py:

if True:
    import local_hybrids as hybrids
else:
    import cloud_hybrids as hybrids

/test_hybrids/test_hybrids.py:

from fixtures.hybrids.foo import my_fixture

def test_hybrid(my_fixture):
   assert my_fixture

最后一个代码块当然不起作用,因为import fixtures.hybrids正在查看文件系统而不是__init__.py的“假”命名空间,这不像from fixtures import hybrids,它可以工作(但是你不能使用灯具,因为名称会涉及点符号)。

我意识到我可以使用 pytest_generate_test 来动态更改固定装置(也许?),但我真的很讨厌从该函数中手动管理每个固定装置...我希望动态导入(如果 x,导入这个,否则导入那个) )是标准的Python,不幸的是它与fixtures机制发生冲突:

import fixtures
def test(fixtures.hybrids.my_fixture):  # of course it doesn't work :)
    ...

我还可以在 init 中逐个导入每个固定功能;更多的跑腿工作,但仍然是愚弄 pytest 并获得不带点的夹具名称的可行选择。

让我看看黑魔法。 :) 可以吗?


我认为在你的情况下最好定义一个固定装置 -environment或其他好听的名字。

该装置可以只是 os.environ['KEY'] 的 getter,或者您可以添加自定义命令行参数,例如here https://github.com/pytest-dev/pytest-services/blob/master/pytest_services/plugin.py然后像这样使用它here https://github.com/pytest-dev/pytest-services/blob/master/pytest_services/service.py#L17最终用途是here https://github.com/pytest-dev/pytest-services/blob/master/pytest_services/mysql.py#L17.

我想告诉你的是,你需要将思维转变为依赖注入:一切都应该是固定的。在您的情况下(以及在我的插件中),运行时环境应该是一个固定装置,在依赖于环境的所有其他固定装置中检查它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytest 和动态夹具模块 的相关文章

  • 如何使用 cython 编译扩展?

    我正在尝试从示例页面编译一个简单的 cython 扩展here http docs cython org src userguide tutorial html在我安装了 Python 2 6 64 位版本的 Windows 7 64 位计
  • 在 Pandas 中按日期获取有效合约

    我在检测 pandas DataFrame 中的活动合约方面遇到了一些困难 假设每一行都是一个协商 对于每一行 我有两列 initial date 和 end date 我想知道的是按日期划分的活跃合约数量 到目前为止我做了一个非常低效的方
  • 如何在Python中循环并存储自变量中的值

    我对 python 很陌生 所以这听起来可能很愚蠢 我进行了搜索 但没有找到解决方案 我在 python 中有一个名为 ExcRng 的函数 我可以对该函数执行什么样的 for 循环 以便将值存储在独立变量中 我不想将它们存储在列表中 而是
  • 从字符串到类型的词法转换

    最近 我尝试用Python存储和读取文件中的信息 遇到了一个小问题 我想从文本文件中读取类型信息 从 string 到 int 或 float 的类型转换非常有效 但从 string 到 type 的类型转换似乎是另一个问题 当然 我尝试了
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 创建一个类似于 Tkinter 的表

    我希望创建类似于 Tkinter 中的表格的东西 但它不一定是这样的 例如 我想创建标题 Name1 Name2 Value 并在每个标题下面有几个空白行 然后 我希望稍后用我计算的值或名称的字符串值填充这些行 因此是标签 对于 Name2
  • spacy 如何使用词嵌入进行命名实体识别 (NER)?

    我正在尝试使用以下方法训练 NER 模型spaCy识别位置 人 名和组织 我试图理解如何spaCy识别文本中的实体 但我无法找到答案 从这个问题 https github com explosion spaCy issues 491在 Gi
  • 如何使用Python的super()来更新父值?

    我对继承很陌生 之前所有关于继承和 Python 的 super 函数的讨论都有点超出我的理解 我当前使用以下代码来更新父对象的值 usr bin env python test py class Master object mydata
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 在可编辑的QSqlQueryModel中实现setEditStrategy

    这是后续这个问题 https stackoverflow com questions 49752388 editable qtableview of complex sql query 在那里 我们创建了 QSqlQueryModel 的可
  • conda-env list / conda info --envs 如何查找环境?

    我一直在尝试 anaconda miniconda 因为我的用户使用随 miniconda 安装的结构生物学程序 并且作者都没有 A 考虑到可能存在其他 miniconda 应用程序 B 他们的程序将在多用户环境中使用 因此 使用 Arch
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • 查找给定节点的最高权重边

    我在 NetworkX 中有一个有向图 边缘的权重从 0 到 1 表示它们发生的概率 网络连通性非常高 所以我想修剪每个节点的边缘 只保留最高概率的节点 我不确定如何迭代每个节点并仅保留最高权重in edges在图中 有没有一个networ
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • TypeError:无法使用抽象方法实例化抽象类 <...>

    这是我的代码 from abc import ABC from abc import abstractmethod class Mamifiero ABC docstring for Mamifiero def init self self
  • 来自 django 教程 was_published_recently.admin_order_field = 'pub_date'

    From Django 教程 https www jetbrains com help pycharm 2017 1 creating and running your first django project html d28041e21

随机推荐

  • 为什么这个 Spring AOP 切入点没有被触发?

    我正在编写非常基本的基于模式的 Spring AOP 这是 xml
  • 如何将一个大数组分割成更小的数组?

    给定一个大数组 如何将其拆分为较小的数组 并将较小数组的大小指定为方法的参数 例如 给定数字 Split 的实现会是什么 int numbers new int 7845 int sectionedNumbers numbers Split
  • 贵公司如何部署其软件?

    我目前正在进行一个短期研究项目 我工作的公司有一个非常繁重的发布流程 随着时间的推移 情况变得越来越糟 我们在每个版本中遇到越来越多的问题 这开始严重影响我们的交付时间表和每个版本的质量 我们提供了一个大型 SAAS 产品 该产品部署到互联
  • cudaFree 不释放内存

    下面的代码计算两个向量 a 和 b 的点积 正确的结果是8192 当我第一次运行它时 结果是正确的 然后 当我第二次运行它时 结果是之前的结果 8192 等等 1st iteration result 8192 2nd iteration
  • 缩写函数模板与带有转发引用参数的函数模板

    两者有什么区别带有转发参考参数的函数模板 template
  • 如何将文件上传请求从 Next.js API 传递到另一个 API?

    我正在尝试在 Next js 应用程序中裁剪图像 将其发送到应用程序中的 API 路由 最后发送到应用程序外部的 API 端点 如果我绕过 API 路由 它可以正常工作 但在通过它时就不行了 图像数据不再正确且无法处理 客户端 Next j
  • Laravel 5.4 中未找到“NumberFormatter”类

    我正在尝试使用 PHP 的 intl 扩展将金额转换为单词 例如 第1450章 一千四百五十 我正在使用 Laravel 5 4 它在 XAMPP 3 2 2 服务器上运行 PHP 5 6 24 正如类似问题中提到的 我已经启用了intl通
  • 在简单的 2d 游戏中实现重力

    我正在制作一个简单的游戏 比如马里奥 角色固定在一个位置 地面向左移动 给人一种角色移动的错觉 地面由左上角和右下角坐标定义的矩形块组成 private int surfaceMatrix 0 100 300 0 block having
  • 使用 Pyspark 时,您会从 Kryo 序列化器中受益吗?

    我读到 Kryo 序列化器在 Apache Spark 中使用时可以提供更快的序列化 不过 我通过 Python 使用 Spark 切换到 Kryo 序列化器后我还能获得显着的好处吗 Kryo不会造成重大影响PySpark因为它只是将数据存
  • Javascript slice 方法是否返回浅拷贝?

    在 Mozilla 开发人员翻译的韩语中 lan g 说 切片方法 返回浅复制的新数组 所以我测试了我的代码 var animals ant bison camel duck elephant var t animals slice 2 4
  • 从 XIB 文件按钮显示 ViewController - Swift

    有没有办法segue from a xib file 自定义 TableViewCell 到另一个视图控制器在 Main storyboard 中 不可能像在主故事板中那样拖动转场 在单元格中我有一个按钮 我想从那里更改视图 我该如何解决
  • 删除注释会提高代码性能吗? JavaScript

    从 JavaScript 代码中删除注释会提高性能吗 我意识到这不是很好的编程实践 因为注释构成了开发的固有部分 我只是想知道它们是否确实在编译过程中增加了一些开销 无论您是编译还是解释 JavaScript 编译器 解释器都需要查看该行
  • 链接器如何找到main函数?

    链接器如何在 x86 64 ELF 格式的可执行文件中找到 main 函数 一个非常通用的概述 链接器将地址分配给由符号标识的代码块main 正如它对目标文件中的所有符号所做的那样 实际上 它并不分配真实地址 而是分配相对于某个基址的地址
  • 以编程方式创建的按钮的 Onclicklistener

    我一直在寻找这个问题的答案 但似乎找不到 我有一个以编程方式创建的按钮 而不是在 xml 文件中 我希望在单击它时发生一些事情 显示警报或移动到另一个屏幕等 按钮代码 Button submitButton new Button this
  • 不带等号的 ASP.NET QueryString

    当我有一个像这样的网址时 http www mysite com MyTest http www mysite com MyTest MyTest 显示为请求对象的查询字符串中的键 如果我删除 符号 例如 http www mysite c
  • FxCop Phoenix 分析引擎出错

    因此 我尝试运行规则集中定义的一堆规则 RuleSet 文件实际上是使用 Sonarqube 生成的 我已经选择了其中的所有规则 包括 FxCop ReSharper 和 StyleCop 规则 我这样启动 FxCop C FxCop Fx
  • 如何防止春季日程重叠?

    Scheduled fixedDelay 5000 public void myJob Thread sleep 12000 如果上一个例程尚未完成 如何阻止此春季作业运行 默认情况下 spring使用单线程Executor 所以两个 Sc
  • C++ 中的 void 指针是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 什么是void指针 什么是空指针 https stackoverflow com questions 4334831 what is a void pointer and what is a null
  • “[本机代码]”是什么意思?

    我尝试研究 jQuery 代码 所以我使用了这个 document write constructor jsfiddle http jsfiddle net WZGWp 我得到这个结果 function Function native co
  • Pytest 和动态夹具模块

    我正在使用 pytest 为可以在本地和云中运行的软件编写功能测试 我想创建 2 个模块 每个模块具有相同的模块 夹具名称 并让 pytest 加载其中之一 具体取决于我是在本地还是在云中运行测试 fixtures fixtures ini