pytest教程-15-多个fixture以及重命名

领取资料,咨询答疑,请➕wei:  June__Go

上一小节我们学习了fixture的yield关键字,本小节我们讲解一下使用多个fixture的方法。

使用多个fixture

如果用例需要用到多个fixture的返回数据,fixture也可以return一个元组、list或字典,然后从里面取出对应数据。

#test_demo.py
import pytest


@pytest.fixture()
def user():
    print("获取用户名")
    a = "yoyo"
    b = "123456"
    return (a, b)


def test_1(user):
    u = user[0]
    p = user[1]
    print("测试账号:%s, 密码:%s" % (u, p))
    assert u == "yoyo"


if __name__ == "__main__":
    pytest.main(["-s", "test_demo.py"])

当然也可以分开定义成多个fixture,然后test_用例传多个fixture参数

# test_demo.py
import pytest


@pytest.fixture()
def user():
    print("获取用户名")
    a = "yoyo"
    return a


@pytest.fixture()
def psw():
    print("获取密码")
    b = "123456"
    return b


def test_1(user, psw):
    '''传多个fixture'''
    print("测试账号:%s, 密码:%s" % (user, psw))
    assert user == "yoyo"


if __name__ == "__main__":
    pytest.main(["-s", "test_demo.py"])

fixture与fixture互相调用

#test_demo.py
import pytest

@pytest.fixture()
def first():
    print("获取用户名")
    a = "yoyo"
    return a

@pytest.fixture()
def sencond(first):
    '''psw调用user fixture'''
    a = first
    b = "123456"
    return (a, b)

def test_1(sencond):
    '''用例传fixture'''
    print("测试账号:%s, 密码:%s" % (sencond[0], sencond[1]))

    assert sencond[0] == "yoyo"

if __name__ == "__main__":
    pytest.main(["-s", "test_demo.py"])

fixture的重命名
通过前面学习fixture可以正常的代替setup和teardown,我们在后期框架中的文件名过多,或者函数名过多,有时会和fixture名字进行重名,或者fixture调用容易出错。fixture也可以进行重新自己更改自己的名称。

在fixture源码中我们可以通过修改name的参数来更改fixture的名称。默认是我们定义def的名称

def fixture(  # noqa: F811
    fixture_function: Optional[_FixtureFunction] = None,
    *,
    scope: "Union[_Scope, Callable[[str, Config], _Scope]]" = "function",
    params: Optional[Iterable[object]] = None,
    autouse: bool = False,
    ids: Optional[
        Union[
            Iterable[Union[None, str, float, int, bool]],
            Callable[[Any], Optional[object]],
        ]
    ] = None,
    name: Optional[str] = None

说这么多,大家也不知道说的啥,举个例子吧,这里我把函数名为login的fixture通过配置参数name=“mitu_login”

# test_demo.py


import pytest


@pytest.fixture(name='mitu_login')
def login():
    print('输入账号,输入密码')
    print('完成登录功能!!!!')
    yield
    print('---退出登录---')


class Test_Login:

    def test_01(self, mitu_login):
        print('------用例01------')

    def test_02(self):
        print('------用例02------')

    def test_03(self, mitu_login):
        print('------用例03------')


if __name__ == '__main__':
    pytest.main(['-s', 'test_demo.py'])

运行结果:

========================================================================================= test session starts ========================================================================================== 
platform win32 -- Python 3.9.12, pytest-7.3.1, pluggy-0.13.1
rootdir: D:\PycharmProjects\Source_Code\pytest_demo
plugins: allure-pytest-2.13.2, html-4.1.1, metadata-3.0.0
collected 3 items                                                                                                                                                                                        

test_demo.py
        SETUP    F mitu_login
        test_demo.py::Test_Login::test_01 (fixtures used: mitu_login).
        TEARDOWN F mitu_login
        test_demo.py::Test_Login::test_02.
        SETUP    F mitu_login
        test_demo.py::Test_Login::test_03 (fixtures used: mitu_login).
        TEARDOWN F mitu_login

========================================================================================== 3 passed in 0.04s =========================================================================================== 

这里发现我们通过使用anjing_login 就直接调用了更改名前的login。

注意:当我们进行对fixture重命名后,如果再次调用以前的名字就会出现报错

import pytest


@pytest.fixture(name='mitu_login')
def login():
    print('输入账号,输入密码')
    print('完成登录功能!!!!')
    yield
    print('---退出登录---')


class Test_Login:

    def test_01(self, login):
        print('------用例01------')

    def test_02(self):
        print('------用例02------')

    def test_03(self, mitu_login):
        print('------用例03------')


if __name__ == '__main__':
    pytest.main(['-s', 'test_demo.py'])

运行结果

========================================================================================= test session starts ==========================================================================================
platform win32 -- Python 3.9.12, pytest-7.3.1, pluggy-0.13.1
rootdir: D:\PycharmProjects\Source_Code\pytest_demo
plugins: allure-pytest-2.13.2, html-4.1.1, metadata-3.0.0
collected 3 items                                                                                                                                                                                       

test_demo.py E
        test_demo.py::Test_Login::test_02.
        SETUP    F mitu_login
        test_demo.py::Test_Login::test_03 (fixtures used: mitu_login).
        TEARDOWN F mitu_login

================================================================================================ ERRORS ================================================================================================ 
_________________________________________________________________________________ ERROR at setup of Test_Login.test_01 _________________________________________________________________________________ 
file D:\PycharmProjects\Source_Code\pytest_demo\test_demo.py, line 14
      def test_01(self, login):
E       fixture 'login' not found
>       available fixtures: cache, capfd, capfdbinary, caplog, capsys, capsysbinary, doctest_namespace, extra, extras, include_metadata_in_junit_xml, metadata, mitu_login, monkeypatch, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory
>       use 'pytest --fixtures [testpath]' for help on them.

D:\PycharmProjects\Source_Code\pytest_demo\test_demo.py:14
======================================================================================= short test summary info ======================================================================================== 
ERROR test_demo.py::Test_Login::test_01
====================================================================================== 2 passed, 1 error in 0.03s ====================================================================================== 
PS D:\PycharmProjects\Source_Code\pytest_demo> 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei:  June__Go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/442333.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[嵌入式系统-37]:龙芯1B 开发学习套件 -7-MIPS指令集

目录 一、MIPS指令分类 二、常用指令详解 三、常用MIPS指令集及格式: 四、CPU内部的32个寄存器: 一、MIPS指令分类 MIPS(Microprocessor without Interlocked Pipeline Stages)指令集是一种广泛用于教学和嵌入式系统的指令集…

在线部署ubuntu20.04服务器,安装jdk、mysql、redis、nginx、minio、开机自启微服务jar包

一、服务器 1、查看服务器版本 查看服务器版本为20.04 lsb_release -a2、服务器信息 服务器初始账号密码 sxd / 123456 首先,更改自身密码都输入123456 sudo passwd 创建最高权限root账号,密码为 123456 su root 3、更新服务器源 1、更新源列表 sudo apt-g…

【golang】Windows与Linux交叉编译保姆级教程

【golang】Windows与Linux交叉编译 大家好 我是寸铁👊 总结了一篇【golang】Windows与Linux交叉编译的文章✨ 喜欢的小伙伴可以点点关注 💝 问题背景 今天寸铁想将Windows中的程序部到Linux下跑,我们知道在从Windows与Linux下要进行交叉编译…

11、Linux-安装和配置Redis

目录 第一步,传输文件和解压 第二步,安装gcc编译器 第三步,编译Redis 第四步,安装Redis服务 第五步,配置Redis ①开启后台启动 ②关闭保护模式(关闭之后才可以远程连接Redis) ③设置远程…

Java基础 - 8 - 算法、正则表达式、异常

一. 算法 什么是算法? 解决某个实际问题的过程和方法 学习算法的技巧? 先搞清楚算法的流程,再直接去推敲如何写算法 1.1 排序算法 1.1.1 冒泡排序 每次从数组中找出最大值放在数组的后面去 public class demo {public static void main(S…

21 easy 1. 两数之和

//给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 // // 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 // // 你可以…

java Spring boot简述jetcache 并叙述后续文章安排

我们之前 讲了 Spring boot 整合 cache 使用 simple(默认) redis Ehcache memcached的几种方式 但是 始终有人觉得不够完善 提出了一些问题 例如 觉得 当前spring boot 对缓存过期的控制过于松散 不严谨 比较明显的体现就是 memcached过期时间在逻辑代码中控制 Ehcache的过期时…

Tomcat的安装

下载Tomcat(这里以Tomcat8.5为例) 直接进入官网进行下载,Tomcat官网 选择需要下载的版本,点击下载这里一定要注意:下载路径一定要记住,并且路径中尽量不要有中文!!!&…

Prompt Engineering、Finetune、RAG:OpenAI LLM 应用最佳实践

一、背景 本文介绍了 2023 年 11 月 OpenAI DevDay 中的一个演讲,演讲者为 John Allard 和 Colin Jarvis。演讲中,作者对 LLM 应用落地过程中遇到的问题和相关改进方案进行了总结。虽然其中用到的都是已知的技术,但是进行了很好的总结和串联…

神经网络的矢量化,训练与激活函数

我们现在再回到我们的神经元部分,来看我们如何用python进行正向传递。 单层的正向传递: 我们回到我们的线性回归的函数。我们每个神经元通过上述的方法,就可以得到我们的激发值,从而可以继续进行下一层。 我们用这个方法就可以得…

排序算法的对比

类别排序方法时间复杂度空间复杂度稳定性平均情况特殊情况 插入 排序 插入排序基本有序最优稳定希尔排序不稳定 选择 排序 选择排序不稳定堆排序不稳定 交换 排序 冒泡排序稳定快速排序基本有序最差不稳定归并排序稳定基数排序稳定

0环PEB断链实现

截止到昨天那里我们的思路就清晰了,通过EPROCESS找到我们要隐藏的进程的ActiveProcessLinks,将双向链表的值修改,就可以将我们想要隐藏的这个进程的ActiveProcessLinks从双向链表中抹去的效果,这里的话如果在windbg里面直接使用ed…

用Python实现一个简单的——人脸相似度对比

近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更…

Day33|贪心算法part3

k次取反后最大的数组元素和 思路:贪心,局部最优,让绝对值大的负数变正数,当前数值达到最大,整体最优;整个数组和达到最大。如果把序列中所有负数都转换为正数了,k还没耗尽,就是k还大…

AWS的CISO:GenAI只是一个工具,不是万能钥匙

根据CrowdStrike的年度全球威胁报告,尽管研究人员预计人工智能将放大对防御者和攻击者的影响,但威胁参与者在其行动中使用人工智能的程度有限。该公司上个月在报告中表示:“在整个2023年,很少观察到GenAI支持恶意计算机网络运营的开发和/或执行。” 对于GenAI在网络安全中的…

Python:在 Ubuntu 上安装 pip的方法

目录 1、检测是否已安装pip 2、更新软件源 3、安装 4、检测是否安装成功 pip和pip3都是Python包管理工具,用于安装和管理Python包。 在Ubuntu上,pip和pip3是分别针对Python2和Python3版本的pip工具。 pip3作用:自动下载安装Python的库文…

2024年HW技术总结

我们都知道, 护网行动 是国家应对网络安全问题所做的重要布局之一。至今已经是8个年头了,很多公司在这时候人手不够,因此不得不招募一些网安人员来参加护网。 红队 扮演攻击的角色,蓝队 扮演防守、溯源的角色,紫队当然…

Java 的 System 类常用方法介绍

Java 中的 System 类是一个final类,它提供了与系统相关的属性和方法。它是一个内置的类,可以直接使用,不需要实例化。System 类提供了标准输入、标准输出和错误输出流,以及对外部定义的属性和系统环境的访问。下面是 System 类的一…

如何在Android 上查找恢复删除/隐藏的照片?5 个值得尝试的方法分享

Android 设备上的删除/隐藏图像有多种用途,无论是保护隐私还是优化存储空间。然而,在某些情况下,用户可能由于意外隐藏、删除或仅仅是出于好奇而需要取消删除/隐藏这些照片。在这种情况下,了解如何在 Android 上查找删除/隐藏的照…

Sora的新商业视角:从生态构建到未来产业协同

在科技飞速发展的当下,人工智能与机器学习不仅重塑了我们的生活方式,还深刻地改变了商业模式的构建方式。Sora,作为一款前沿的AI视频生成工具,其盈利路径和未来产业协同的可能性值得深入探讨。 Sora学习资料:使用方式…