参数化测试也取决于 pytest 中的参数化值

2024-04-28

我有一个测试,我有一个设置方法,应该收到一个dataset和一个测试函数,应该为每个运行data in dataset

基本上我需要类似的东西:

datasetA = [data1_a, data2_a, data3_a]
datasetB = [data1_b, data2_b, data3_b]

@pytest.fixture(autouse=True, scope="module", params=[datasetA, datasetB])
def setup(dataset):
    #do setup
    yield
    #finalize

#dataset should be the same instantiated for the setup
@pytest.mark.parametrize('data', [data for data in dataset]) 
def test_data(data):
    #do test

它应该像这样运行:

  • 设置(数据集A)
  • 测试(数据1_a)
  • 测试(数据2_a)
  • 测试(data3_a)
  • 设置(数据集B)
  • 测试(数据1_b)
  • 测试(数据2_b)
  • 测试(data3_b)

然而,似乎不可能像我在示例中那样对夹具获得的变量进行参数化。

我可以让我的函数使用固定装置并在测试方法内进行迭代:

def test_data(dataset):
    for data in dataset:
        #do test

但随后我会进行一次大型测试,而不是针对每种情况进行单独的测试,这是我不希望进行的。

有什么方法可以实现这一点吗?

Thanks!


答案#1:如果严格遵循测试设计,那么它应该如下所示:

import pytest

datasetA = [10, 20, 30]
datasetB = [100, 200, 300]

@pytest.fixture
def dataset(request):
    #do setup
    items = request.param
    yield items
    #finalize

@pytest.fixture
def item(request, dataset):
    index = request.param
    yield dataset[index]

#dataset should be the same instantiated for the setup
@pytest.mark.parametrize('dataset', [datasetA, datasetB], indirect=True)
@pytest.mark.parametrize('item', [0, 1, 2], indirect=True)
def test_data(dataset, item):
    print(item)
    #do test

注意两者的间接参数化item & dataset。参数值将被传递到同名的装置request.param。在本例中,我们使用索引的假设是数据集的长度相同,均为 3 个项目。

下面是它的执行方式:

$ pytest -s -v -ra test_me.py 
test_me.py::test_data[0-dataset0] 10
PASSED
test_me.py::test_data[0-dataset1] 100
PASSED
test_me.py::test_data[1-dataset0] 20
PASSED
test_me.py::test_data[1-dataset1] 200
PASSED
test_me.py::test_data[2-dataset0] 30
PASSED
test_me.py::test_data[2-dataset1] 300
PASSED
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

参数化测试也取决于 pytest 中的参数化值 的相关文章

随机推荐

  • 在 pandas DataFrame 中取消嵌套(分解)多个列表列的有效方法

    我正在将多个 JSON 对象读取到一个 DataFrame 中 问题在于某些列是列表 此外 数据非常大 因此我无法使用互联网上可用的解决方案 它们非常慢并且内存效率低下 我的数据如下所示 df pd DataFrame A x1 x2 x3
  • 是否有 R 函数将 p.value 转换为显着性代码?

    summary显示 p values 的显着性代码 是否有 R 函数将 p value 转换为显着性代码 例如 0 02 gt 和 0 005 gt Use symnum如下所示 symnum了解更多信息 p values lt c 9 5
  • log4net 是否会杀死我的 WCF 单元测试?

    我的解决方案中有三个项目 提供我想要测试的功能的 WCF Web 服务 调用该 Web 服务的 Web 应用程序 对服务运行测试的测试项目 Web 服务和 Web 应用程序都使用 log4net 和单独的配置文件 并在 AssemblyIn
  • C++ 中最难发现的错误[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 服务堆栈上的 SSL

    Mono 上的服务堆栈是否支持 SSL 我只能访问 Mac 我在这里找到的说明要求您使用 Windows 工具创建 pvk 文件 http joshua perina com geo post using ssl https with mo
  • 如何向 SOAP 客户端添加 HTTP 标头

    如果可以将 HTTP 标头添加到 SOAP 客户端 Web 服务调用中 有人可以回答我吗 上网冲浪后 我唯一发现的就是如何添加 SOAP 标头 代码如下所示 var client new MyServiceSoapClient client
  • 透明

    从概念上讲 是否可以创建一个 div 显示内容 然后在内容上放置一个透明的 div 这样如果用户右键单击 gt 另存为 保存图像等 他们在执行此操作时将不会得到任何内容 是的 但它和 如果有人想复制您的内容 他们会
  • 不解决或拒绝承诺是否安全

    想象一下一个 Web 应用程序 其路由需要在继续之前检查是否允许用户访问给定资源 已通过身份验证 检查依赖于数据库调用 在每条路线中 我可能有 authorizeOwnership req res then function do stuf
  • 在 Windows Mobile 上模拟键盘事件

    请参考下面的截图 日期时间控件是紧凑框架 DateTimePicker 编号按钮是标准按钮控件 单击 DateTimePicker 的箭头将显示一个日历控件 允许用户选择日期 但是 如果用户单击所选文本日期的任何部分 该部分就会突出显示 并
  • 根据 rowversion 值更新记录?

    我最近实现了SQLrowversion以防止我的系统中出现并发问题 我用rowversion更新表中的单行时在 where 子句中 到目前为止 我已经测试过 似乎是一个很好的解决方案 现在我正在寻找一种简单的方法来在我的系统中实现此功能 这
  • 如何在java应用程序中检测FIN - tcp标志?

    我在两台计算机之间有持久的 TCP 连接 第二台计算机不受我的控制 第二台计算机可以随时发送FIN标志 并且首先必须关闭当前连接 将FIN标志发送回第二台计算机 我如何知道第二台计算机正在发送 FIN 标志 以及何时必须调用 Java 应用
  • Qt 捕获按下的键

    我想到写原始蛇 我有一个窗口 程序可以在其中绘制随机线条 但我想不出如何捕捉按下的键来改变画线的方向 class QUpdatingPathIte public QGraphicsPathItem void advance int phas
  • 有没有办法在 Xcode 4 中为 ARM 而不是 Thumb 进行编译?

    如果有很多浮点运算正在进行 Apple 建议针对 ARM 进行编译 而不是针对拇指进行编译 我的整个应用程序几乎是一个大型浮点运算 iOS 应用程序开发工作流程指南中是这样说的 iOS 设备支持两种指令集 ARM 和 Thumb Xcode
  • 无需使用私有 API 即可获取当前第一响应者

    我在一个多星期前提交了我的应用程序 今天收到了可怕的拒绝电子邮件 它告诉我 我的应用程序无法被接受 因为我使用的是非公共 API 具体来说 它说 您的应用程序中包含的非公共 API 是firstResponder 现在 有问题的 API 调
  • @interface中的实例变量;标头与实现

    在标头中声明私有实例变量与在实现中声明它有什么区别吗 在 TestObj h 中 interface TestObj NSObject int test end 与 TestObj m 中的比较 interface TestObj int
  • ASP.NET Core 部署到 IIS 错误:不应在已部署的应用程序中启用开发环境

    我跟着本文 https weblog west wind com posts 2016 Jun 06 Publishing and Running ASPNET Core Applications with IIS将我的 ASP NET M
  • 集合推导式在 Pydev (Python) 上不起作用

    x for x in range 10 在 IDLE 上完美运行 但是当我在 eclipse 中尝试 使用 Pydev 插件 时 出现语法错误 未定义的变量 x 是因为 Pydev 不支持集合理解什么的吗 我该怎么做才能使这项工作成功 这只
  • Postgresql存储过程返回表所有列

    创建了一个函数 该函数有一个输入参数 我可以返回一列 但我想返回所有表列 另外我想做的是 如果结果为零 函数只返回 0 我该怎么做 这里是错误结果 错误 查询没有结果数据的目标 提示 如果您想放弃 SELECT 的结果 请使用 PERFOR
  • 部署应用程序时无需取消部署前一个应用程序并且无需停机?

    我在 Web 应用程序中使用 Glassfish Java 和 JSP over MySQL 许多在线用户使用此网络应用程序 该网站不应关闭 当我想要部署一个新的 war 文件时 我应该在服务器上为我的应用程序取消部署并部署新的战争文件 我
  • 参数化测试也取决于 pytest 中的参数化值

    我有一个测试 我有一个设置方法 应该收到一个dataset和一个测试函数 应该为每个运行data in dataset 基本上我需要类似的东西 datasetA data1 a data2 a data3 a datasetB data1