在参数化中传递 pytest 夹具

2024-05-05

通过在 @pytest.mark.parametrize 中传递 conftest.py 中定义的装置,我收到以下错误:

pytest --alist="0220,0221" test_1.py -v -s
NameError: name 'alist' is not defined

conftest.py:

def pytest_addoption(parser):
    parser.addoption("--alist", action="store")

@pytest.fixture
def alist(request):
    return request.config.getoption("--alist").split(",")

测试_1.py:

@pytest.mark.parametrize("channel", alist, scope="class")
class TestRaIntegrationReplay:

    def test_ra_start_time(self, channel):
        print(channel)

如果我将 alist 作为固定装置传递给测试,例如:

    def test_ra_start_time(self, alist):
        for channel in alist:
            print(channel)

它工作得很好,但它不适用于传递给 @pytest.mark.parametrize


正如评论中提到的,您不能直接将固定装置传递给mark.parametrize装饰器,因为装饰器是在加载时评估的。
您可以通过实现在运行时进行参数化pytest_generate_tests:

import pytest

@pytest.hookimpl
def pytest_generate_tests(metafunc):
    if "alist" in metafunc.fixturenames:
        values = metafunc.config.option.alist
        if value is not None:
            metafunc.parametrize("alist", value.split(","))

def test_ra_start_time(alist):
    for channel in alist:
        print(channel)

def test_something_else():
    # will not be parametrized
    pass

参数化是根据存在的情况完成的alist测试函数中的参数。为了使参数化工作,需要这个参数(否则你会因为缺少参数而收到错误)。

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

在参数化中传递 pytest 夹具 的相关文章

随机推荐

  • Laravel 表单标签中内联“必需”星号

    我正在尝试为 Laravel 中的必填字段添加红色星号 但我不确定如何将它们添加到标签中 我目前正在做的是 Form label took act or sat Did you or will you take the SAT or ACT
  • 部署应用程序引擎后的暂存文件桶

    部署谷歌应用引擎后 谷歌云存储中至少创建了4个存储桶 项目 ID appspot com 登台 项目 ID appspot com 工件 project id appspot com vm containers 项目 ID appspot
  • ASP.NET MVC 4 会话超时

    我正在使用 VS 2012 IIS 7 5 开发一个带有 ASP NET MVC4 的互联网应用程序 我正在使用表单身份验证 我的网络配置中的设置如下
  • ASP.NET MVC 中的缩小操作筛选器属性

    我有一个返回大量动态 JavaScript 的控制器操作 一次向客户端提供服务 并且我已经启用了 GZip 压缩 我想做的一件事是读取执行的结果流并对其应用 JS 缩小 是否可以使用操作过滤器属性来做到这一点 我认为我的问题可以归结为 假设
  • PHP 中的 Rss 阅读器

    header Access Control Allow Origin tmpFile tmpFile txt val http rss news yahoo com rss topstories curlHandle curl init v
  • linq-to-sql:存储过程不能在查询中使用

    这在 VS2010 RC LINQ to SQL 上失败 并出现 InvalidOperationException 存储过程不能在查询内使用 var foo from a in aTable from b in this SomeStor
  • Maven 找不到 .git (dotGitDirectory)

    我有一个与所问问题类似的问题here https stackoverflow com questions 31159484 mavengit commit id plugin git directory could not be found
  • 将数据传递给视图时,node ejs 引用错误数据未在 eval 处定义

    我已经接近使用express和ejs的节点应用程序 但是当我尝试将数据从控制器传递到我的视图时 如下所示 var myData theData data res render path join dirname views index my
  • 在布局的右侧和底部添加阴影

    我想在布局的右侧和底部添加光阴影 我尝试使用android background android drawable dialog holo light frame 但它在布局的所有四个侧面添加了厚厚的阴影 我需要创建什么可绘制并将其设置为背
  • WPF TextBlock 元素和 Label 控件有什么区别? [复制]

    这个问题在这里已经有答案了 从视觉上看 以下两个片段都生成相同的 UI 那么为什么有2个控件 Snippet1
  • Radio r = Radio("PSR", 100.8) 和 Radio("PSR", 100.8) 有什么区别? [复制]

    这个问题在这里已经有答案了 我是 C 新手 正在尝试理解一些东西 我的 main cpp 中有这段代码 Radio r Radio PSR 100 8 或该代码 Radio r PSR 100 8 两者似乎都有效并且做同样的事情 那么有什么
  • 在 Javascript 中设置多个 cookie

    我正在尝试设置多个 cookiedocument cookie 但不幸的是只有一个被添加 我知道网上有多个设置此类 cookie 的示例 我遵循了其中之一 但我仍然无法解决这个问题 我跟着这个link http www elated com
  • 使用geom_sf时向ggplot2添加多个图例

    我的问题结合了之前在 Stackoverflow 上发布的两个单独的问题 向 ggplot 添加多个图例 https stackoverflow com questions 26443371 adding multiple legends
  • 在 v8 中向全局对象原型添加函数模板

    在V8中 我想通过添加一些函数来修改全局内置Array对象的原型 在 JavaScript 中 我会这样做 例如 Array prototype sum function calculate sum of array values 如何在
  • 硬币兑换的空间优化解决方案

    给定一个值 N 如果我们想要找 N 分钱 并且我们有无限供应每种 S S1 S2 Sm 价值的硬币 我们可以有多少种找零方式 硬币的顺序并不重要 例如 对于 N 4 且 S 1 2 3 有四种解 1 1 1 1 1 1 2 2 2 1 3
  • 如何为codeigniter项目完美设置虚拟主机?

    我正在尝试为 codeigniter 项目制作虚拟主机 我已经在 httpd vhosts conf 中完成了此操作
  • 将组成员身份从 AD 中的一个用户复制到另一用户

    我正在尝试构建一个脚本 它将组成员身份从 AD 中的一个用户复制到另一个用户 我正在尝试使用 powershell 来自动执行此任务 然而 我在为用户创建支票时陷入困境 换句话说 当我将组成员身份从一个用户复制到另一个用户时 我希望能够在添
  • 数据库连接模拟失败

    我有一个 SL4 应用程序 它使用 WCF 与后端 SQL Server 2008 数据库进行通信 由于调用的存储过程需要数据库权限 其中一项 WCF 服务需要使用专用系统帐户连接到数据库 我尝试在服务代码中使用模拟来实现解决方案 例如 i
  • 如何使用 Intent.ACTION_GET_CONTENT 过滤掉不需要的文件

    我使用intent ACTION GET CONTENT 来允许用户仅选择图像或视频文件 这就是我准备意图的方式 Intent intent new Intent Intent ACTION GET CONTENT intent setTy
  • 在参数化中传递 pytest 夹具

    通过在 pytest mark parametrize 中传递 conftest py 中定义的装置 我收到以下错误 pytest alist 0220 0221 test 1 py v s NameError name alist is