使用固定装置返回值作为 mark.parametrize() 中的值

2024-03-08

我的问题是 - 是否可以使用夹具的返回值作为参数化中的值? 问题是 - 我想动态获取参数化的可能值(例如,虚拟服务器上的可用系统)。当其中一个设备创建虚拟服务器时,我可以访问这些。测试看起来像这样(伪代码):

[conftest.py]

@pytest_fixture(scope='session')
def test_server(request):
    test_server = Server([default_params])
    test_server.add()
    def fin():
        test_server.delete()
    request_addfinalizer(fin)
    return test_server()

[tests.py]

def test_basic_server(test_server):
    systems = test.server.get_available_systems()
    for system in systems:
        test_server.install(system)
        test_server.run_checks()
        test_server.uninstall(system)

def test_other(test_server):
    [other tests]

etc

这样,为每个会话添加一台服务器,然后在其上运行所有测试,并在会话结束后删除服务器。但是有没有一种方法可以使用会话开始时添加的服务器方法来获取 @pytest.mark.parametrize 中的可用系统,而无需显式列出它们(静态地作为参数化中的列表)?这样每个系统都会在单独的测试中运行。

我尝试在另一个夹具中使用 test_server ,然后返回列表(与 test_server 夹具返回 test_server 的方式相同,但我不能将其用作参数化中的值 - 因为在任何测试中调用 test_server 夹具之前都会评估装饰器,并且得到该列表取决于 test_server 固定装置。

这将是理想的:

[tests.py]

@pytest.mark.parametrize('system',[systems_list <- dynamically generated
                                             when the server is created])

def test_basic_server(test_server,system):
    test_server.install(system)
    test_server.run_checks()
    test_server.uninstall(system)

这只是一个非常基本的示例,在我的测试中,我需要根据多个场景和值进行参数化,当我静态执行此操作时,我最终会得到巨大的数组。

但原理保持不变 - 基本上:我可以在使用此固定装置运行的第一个测试之前调用固定装置,或者 pytest.mark.parametrize() 如何访问固定装置值?


我想你可能无法直接实现你想要的。因为@pytest.mark.parametrize收集时调用,收集完成后调用。

但我有另一种方法可以实现类似的结果,主要是通过扩展 pytest 插件pytest_generate_tests及使用方法metafunc.parametrize. https://pytest.org/latest/parametrize.html#basic-pytest-generate-tests-example https://pytest.org/latest/parametrize.html#basic-pytest-generate-tests-example

这是我的解决方案。 在conftest.py中

class System(object):
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return "<System '{}'>".format(self.name)

def get_available_systems():
    return [System('A'), System('B'), System('C')]


def pytest_generate_tests(metafunc):
    if 'system' in metafunc.fixturenames:
        available_systems = get_available_systems()

        metafunc.parametrize('system', available_systems)

在测试文件中:

def test_basic_server(system):
    print(system)

这是输出,您将可以访问测试中的每个系统。

collected 3 items

test_01.py::test_basic_server[system0] <System 'A'>
PASSED
test_01.py::test_basic_server[system1] <System 'B'>
PASSED
test_01.py::test_basic_server[system2] <System 'C'>
PASSED

糟糕的是,get_available_systems每次使用固定装置时都会被调用system,这不是你想要的。但我认为添加一些额外的逻辑来使查询逻辑只执行一次并不难。

例如:

def pytest_generate_tests(metafunc):
    if 'system' in metafunc.fixturenames:
        if hasattr(metafunc.config, 'available_systems'):
            available_systems = metafunc.config.available_systems
        else:
            available_systems = get_available_systems()
            metafunc.config.available_systems = available_systems
        metafunc.parametrize('system', available_systems)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用固定装置返回值作为 mark.parametrize() 中的值 的相关文章

  • (discord.py) 尝试更改成员角色时,“用户”对象没有属性“角色”

    因此 我正在尝试编写一个机器人 让某人在命令中指定的主持人指定的一段时间内暂停角色 我知道该变量称为 小时 即使它目前以秒为单位 我稍后会解决这个问题 基本上 它是由主持人在消息 暂停 personmention numberofhours
  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像

随机推荐

  • Quercus (Java) 比原生 PHP 更快吗?

    如果是这样 为什么 或者也许更好的问题是 何时 我发现了一些零散的评论 例如这个帖子 https stackoverflow com questions 777356 is quercus a viable replacement for
  • Karma、PhantomJS 和 es6 Promise

    我正在编写一个使用新的 es6 Promise 的 JavaScript 库 我可以在 Firefox 中测试该库 因为 Promise 已定义 但是 当我尝试使用 Karma 和 PhantomJS 测试我的代码时 出现错误Can t f
  • 错误问题:“访问路径 被拒绝。”

    我一直在寻找解决该错误的技巧 google stackoverflow com 等 但一切都不起作用 我需要通过 asp net 应用程序动态创建 aspx 文件 我为尝试修复它所做的事情 1 在文件夹的 属性 gt 安全性 中 我添加了
  • HTML5 视频自动播放,但有 5 秒延迟

    我的网页上有一个 20 秒长的 HTML5 视频循环作为背景 并将其设置为自动启动 视频自动播放可以延迟5秒吗 我试图在尝试播放之前让视频完全加载 以防止视频卡顿 这是我当前的代码
  • 对象方法调用不带括号

    导入后是否可以调用不带括号的对象方法 这是我的测试代码 基于本文 http www artima com scalazine articles package objects html马丁 奥德斯基 package gardening fr
  • 实体框架:获取不直接相关的对象

    我正在为我的 NET 应用程序使用实体框架 我也能够返回对象及其直接相关的对象 非常方便 但我在获取这些对象的对象时遇到问题 IEnumerable
  • 在 wpf 中运行视频

    我希望我的第一个项目以视频的形式实现 我该怎么做 我想播放视频 然后当我单击表单时 视频停止并且应用程序转到另一个页面 请帮我 尝试使用 MediaElement
  • Windows 8 - 自定义动态磁贴

    我们正在使用 C 开发适用于 Windows 8 的应用程序 我们的应用程序涉及用户创建的绘图 我们希望将他们的绘图合并到活动磁贴中 我找到了将文本和图片设置为应用程序的动态磁贴的示例 有没有办法做自定义的事情来渲染线条等 或者是通过将 P
  • Formvalidation.io - 无法读取 null 的属性“classList”

    使用 formvalidation io 时 我的控制台总是出现错误 我不知道这个错误的原因是什么 即使我使用后端验证 URL 我仍然会在某些网站上收到垃圾邮件 我正在使用隐形 ReCaptcha https formvalidation
  • 元素结束标记中的属性?

    执行以下操作是否被视为有效 li stuff li li stuff li li stuff 或者做属性have出现在开始标签中 不 不是 您必须在开始标记中使用属性 Running a test in w3c 验证器 http valid
  • 将 springboot 升级到 2.4.4 后,response.sendError(statusCode, "error message") 不起作用

    我在用AuthenticationEntryPoint处理身份验证问题 将异常原因传递给最终用户 response sendError responseCode errorReason 我最近将 Spring Boot 从 2 2 11 R
  • 类似 Javascript ||在 PHP 中 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 In javascript 我可以使用 例如这样的语句 window foo window foo 如果没有的话window foo它将被分配给
  • C++方法声明问题

    我在 Image cpp 中有一些代码 Image Image int width int height int depth m sFileName 0 and in Image h class Image public DrawAble
  • 调试使用 pm2 运行的应用程序

    应用程序由以下人员运行 pm2 start app js or pm2 start config json 我想使用 node inspector 在本地调试我的应用程序 我添加了debug争论 pm2 start node args de
  • UIBarButtonItem 图像应该有多大?

    我正在创建自己的自定义 按日期排序 和 按数字排序 按钮 我计划将它们作为右侧按钮放置在导航栏中 我的图像应该有多大才能适当地填充空间 UIBarItem https developer apple com documentation ui
  • 如何使用 php 在 XML 文件中进行搜索?

    不知道有没有办法在xml文件中搜索 例如 我想要得到Value使用Name from AttrList和产品代码 是否可以 这就是我的 xml 的样子
  • jQuery 将类添加到图像链接,而不会在链接传递变量时弄乱

    好的 所以我使用了一些 jquery 来选择所有 a 页面上的标签以及它们是否链接到图像文件以添加zoom出于灯箱的目的对其进行类处理 这是有效的代码 document ready function a href png a href gi
  • List<>.IndexOf 是按引用还是按值进行比较?

    List
  • ant+cpptasks 与 scons 与 make

    我正在调查scons http www scons org 我只是想确保在我将大量脑细胞投入到完全不同的事物之前我知道替代方案是什么 我过去一直在使用 GNU make 但从来没有对它感到特别满意 特别是 为什么 Ant 没有更频繁地用于
  • 使用固定装置返回值作为 mark.parametrize() 中的值

    我的问题是 是否可以使用夹具的返回值作为参数化中的值 问题是 我想动态获取参数化的可能值 例如 虚拟服务器上的可用系统 当其中一个设备创建虚拟服务器时 我可以访问这些 测试看起来像这样 伪代码 conftest py pytest fixt