范围为“class”的 Pytest 装置不适用于“setup_class”方法

2023-12-23

我目前正在使用pytest_addoption运行我的 API 测试,因此测试应该针对用户在命令行上使用的环境运行。在我的测试文件中,我试图实例化UsersSupport只上一次课,就通过了env争论。我的代码:

测试.py

import pytest

# Environments
QA1 = 'https://qa1.company.com'
LOCALHOST = 'https://localhost'


def pytest_addoption(parser):
    parser.addoption(
        '--env',
        action='store',
        default='qa1'
    )


@pytest.fixture(scope='class')
def env(request):
    cmd_option = request.config.getoption('env')
    if cmd_option == 'qa1':
        chosen_env = QA1
    elif cmd_option == 'localhost':
        chosen_env = LOCALHOST
    else:
        raise UnboundLocalError('"--env" command line must use "qa1", "localhost"')
    return chosen_env

用户支持.py

import requests


class UsersSupport:

    def __init__(self, env):
        self.env = env
        self.users_endpoint = '/api/v1/users'

    def create_user(self, payload):
        response = requests.post(
            url=f'{self.env}{self.users_endpoint}',
            json=payload,
        )
        return response

post_create_user_test.py

import pytest
from faker import Faker
from projects import UsersSupport
from projects import users_payload


class TestCreateUser:

    @pytest.fixture(autouse=True, scope='class')
    def setup_class(self, env):
        self.users_support = UsersSupport(env)
        self.fake = Faker()
        self.create_user_payload = users_payload.create_user_payload

    def test_create_user(self):
        created_user_res = self.users_support.create_user(
            payload=self.create_user_payload
        ).json()
        print(created_user_res)

问题

当我跑步时pytest projects/tests/post_create_user_test.py --env qa1我越来越AttributeError: 'TestCreateUser' object has no attribute 'users_support'错误,但如果我删除scope from setup_class方法,此方法在每个方法上运行,而不是在所有方法上运行。

我怎样才能使用env固定装置在setup_class并实例化UsersSupport在所有方法中使用的类?


如果您使用具有类范围的固定装置,self参数不引用类实例。但是,您仍然可以通过使用来访问类本身self.__class__,因此您可以从实例变量创建类变量。

您的代码可能如下所示:

import pytest
from faker import Faker
from projects import UsersSupport
from projects import users_payload


class TestCreateUser:
   
    @pytest.fixture(autouse=True, scope='class')
    def setup_class(self, env):
        self.__class__.users_support = UsersSupport(env)
        self.__class__.fake = Faker()
        self.__class__.create_user_payload = users_payload.create_user_payload

    def test_create_user(self):
        created_user_res = self.users_support.create_user(
            payload=self.create_user_payload
        ).json()  # now you access the class variable
        print(created_user_res)

在测试过程中,为每个测试创建一个新的测试实例。
如果你有默认的function作用域固定装置,它将在测试的同一实例中调用,以便self夹具和当前测试的参数引用同一实例。

如果是class范围固定装置,在创建测试实例之前,设置代码在单独的实例中运行 - 该实例必须存活到所有测试结束才能执行拆卸代码,因此它与所有测试实例不同。由于它仍然是同一测试类的实例,因此您可以将变量存储在测试班在这种情况下。

您还可以将类范围的固定装置设为类方法,因为无论如何您只需要访问该类:

class TestCreateUser:
   
    @pytest.fixture(autouse=True, scope='class')
    @classmethod
    def setup_class(cls, env):
        cls.users_support = UsersSupport(env)
        cls.fake = Faker()
        cls.create_user_payload = users_payload.create_user_payload

这使得意图更清晰,代码更具可读性。请注意,在这种情况下,您必须将类方法装饰器放在固定装置装饰器之后。

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

范围为“class”的 Pytest 装置不适用于“setup_class”方法 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐

  • 临时类型变量的作用域

    我有大量到位vector http hackage haskell org package vector 0 10 0 1类型的函数 f M MVector v r PrimMonad m gt v PrimState m r gt v P
  • SQLAlchemy批量更新策略

    我目前正在使用 SQLAlchemy 在 GAE 上 连接到 Google 的云 MySQL 编写一个 Web 应用程序 Flask 并且需要对表进行批量更新 简而言之 进行了大量计算 导致需要在 1000 个对象上更新单个值 目前我正在一
  • 如何做好复杂功能的基准测试?

    我即将开始对 C 中的一组复杂函数进行非常详细的基准测试 这是 科学级别 的细节 我想知道 进行认真的基准测试的最佳方法是什么 我正在考虑运行它们 例如 每个运行 10 次 平均计时结果并给出标准开发 例如 仅使用
  • 使用 Twitter API 时收到“Stream遇到 HTTP 错误:403”。是什么原因导致此错误以及如何修复它?

    我对使用 Twitter API 非常陌生 并且正在测试一些 Python 代码 如下 from tweepy import OAuthHandler from tweepy import Stream import twitter cre
  • 例外首先出现在哪种语言中?

    我第一次接触到例外是在 ADA 83 中 据我所知 例外的概念是 ADA 的设计者发明的 这是真的吗 或者之前的任何编程语言也使用异常吗 根据c2 com 的突破性语言页面 http www c2 com cgi wiki GroundBr
  • 如何仅替换找到的文本的一部分?

    我有一个文件 其中包含一些逗号分隔的名称和一些逗号分隔的帐号 名字永远是这样的Dow John和像这样的数字012394 19862 Using 记事本 的 正则表达式查找 功能 我想用管道替换数字之间的逗号 基本上 turn Dow Jo
  • 为什么灰度图像有3个通道

    我正在对灰度图像执行操作 这些操作的结果图像具有与输入图像相同的扩展名 例如 如果输入图像是 jpg or png输出图像是 jpg or png分别 我将图像转换为灰度 如下所示 ImgProc cvtColor mat grayscal
  • 与机器人框架一起使用时,aspnetcore 中的 CloudStorageAccount 不明确

    我刚刚升级了基于 SDK v4 并使用 aspnet core 构建的机器人框架项目 现在我最终遇到了 CloudStorageAccount 类的冲突 它说 类型 CloudStorageAccount 同时存在于 Microsoft A
  • 什么是routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

    What is routes IgnoreRoute resource axd pathInfo 我在项目中找不到任何 axd 文件 我可以删除此路由规则吗 axd 文件实际上并不存在 ASP NET 在内部使用带有 axd 扩展名的 UR
  • rust dyn 特征变量具有不同的泛型类型?

    我对 Rust 还很陌生 尝试使用diesel rs 创建数据库连接 这是我的代码的一部分 use diesel Connecction use diesel mysql MysqlConnection use diesel sqlite
  • 为什么以下使用方法引用的转换不会产生编译错误? [复制]

    这个问题在这里已经有答案了 public class SomeClass public static int someFunction int a return a public static void main String args C
  • 在 Windows 上使用 Xamarin Studio 构建 iOS 应用程序

    是否可以使用在 Windows 上运行的 Xamarin Studio 构建 iOS 应用程序 并将其连接到在 mac 上运行的 Xamarin ios 构建主机 The 我见过的例子 http docs xamarin com guide
  • C++ 中的正态(高斯)分布函数

    我需要知道一种方法来获得 50 个数字的高斯分布 我知道 Boost 库 它可以生成随机数 就我而言 我不需要随机数 我需要 50 个数字的正态分布 我如何在 C 中做到这一点 从 C 11 开始 标准库中提供了正态 高斯 分布 http
  • 如何将通用委托参数传递给 .NET 2.0 中的方法

    我有一个带有委托声明的类 如下 Public Class MyClass Public Delegate Function Getter Of TResult As TResult the following code works Publ
  • 服务器到服务器 > 检索远程 zip 文件并将其解压到本地服务器目录

    我在服务器 B 上有一个 wp 插件文件 其目的是从远程服务器 A 检索 zip 文件 服务器 B 收到 zip 文件后 应提取内容并将文件复制到服务器 B 上的特定文件夹中 覆盖任何现有文件 我从下面的文件中借用了一些代码 该文件使用上传
  • 使用 Android NDK 编译原生 C++ 共享对象

    我已经生成了一个 so在 Linus 上通过 C 文件并得到 so现在生成文件我已经交叉编译了这个 so归档Android ARM所以我必须通过编译它Android NDK这样新生成的 so可以在我的android项目中使用 那么任何人都可
  • TRY_PARSE 与 TRY_CONVERT

    我目前正在学习我的 MCSA 数据平台 我错误地回答了以下问题 我正在寻找解释为什么我的答案是错误的 因为测试中的解释没有多大意义 您有一个名为 AuditTrail 的表 用于跟踪对其他表中数据的修改 AuditTrail 表由许多进程更
  • 我可以在java中使用方法链接的抽象构建器类而不执行不安全操作吗?

    我试图为某些构建器类提供一个抽象基类 以便我可以轻松地在构建器实现之间重用代码 我希望我的构建器支持方法链接 因此方法必须返回最具体类型的 this 实例 我想我可以用泛型来做到这一点 不幸的是 我无法在不使用不安全操作的情况下做到这一点
  • 生成器不是迭代器吗?

    我有一个生成器 一个产生东西的函数 但是当试图将它传递给gensim Word2Vec我收到以下错误 类型错误 您不能将生成器作为句子参数传递 尝试迭代器 生成器不是迭代器的一种吗 如果没有 我如何从中创建一个迭代器 查看库代码 它似乎只是
  • 范围为“class”的 Pytest 装置不适用于“setup_class”方法

    我目前正在使用pytest addoption运行我的 API 测试 因此测试应该针对用户在命令行上使用的环境运行 在我的测试文件中 我试图实例化UsersSupport只上一次课 就通过了env争论 我的代码 测试 py import p