测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Pytest----fixture传值的作用
收藏本文
作者:redrose2100 类别: 日期:2022-12-03 03:43:37 阅读:738 次 消耗积分:0 分
[TOC] ![](https://redrose2100.oss-cn-hangzhou.aliyuncs.com/img/7cd47362-951c-11ee-986a-0242ac110004.png) 众所周知,fixture是pytest中的一个非常重要的功能,同时又被普遍认为是一个非常难懂的功能,这里我们就从fixture最简单的功能讲起。 为了更好的讲解fixture的功能,这里直接以代码为例,首先fixture最简单的功能就是传值的作用,什么意思呢,首先看如下一段代码,这面test_func(get_num) 很显然是一个测试函数,而get_num就是一个fixture,即fixture的定义跟定义函数是一样的,只不过在此函数上面通过 @pytest.fixture() 装饰,get_num这个fixture中直接返回一个数字10,当然在实际应用可能会经过一系列的计算处理,最后将得出的结果返回,而在测试函数test_func的形参的位置直接使用get_num这个fixture的名,如果在学习fixture之前,这里会把get_nunm认为是test_func的一个形参,这里因为get_num给 @pytest.fixture 声明为一个fixture,此时在测试函数test_func(get_num) 中其实就相当于是 test_func(get_num()) ,因此在测试函数中直接对 get_num 进行断言,期望get_num等于9,这就是fixture的传值的使用方法。这里可以看出,如果get_num没有给声明为fixture,那么这里的断言语句肯定是错误的,因为get_num是函数对象了,而当get_num被声明为fixture时,get_num就表示get_num这个函数的返回值了。 ```python import pytest @pytest.fixture() def get_num(): print("\nin get_num fixture...") return 10 def test_func(get_num): assert get_num == 9 ``` 通过pytest –s 执行结果如下,可以看出,在测试函数中,get_num此时确实不是一个函数对象,而是get_num函数的返回值10,。 ```bash (demo-HCIhX0Hq) E:\demo>pytest -s =================== test session starts =================== platform win32 -- Python 3.7.9, pytest-7.1.3, pluggy-1.0.0 rootdir: E:\demo plugins: assume-2.4.3, rerunfailures-10.2 collected 1 item test_demo.py in get_num fixture... F ======================== FAILURES ========================= ________________________ test_func ________________________ get_num = 10 def test_func(get_num): > assert get_num == 9 E assert 10 == 9 test_demo.py:9: AssertionError ================= short test summary info ================= FAILED test_demo.py::test_func - assert 10 == 9 ==================== 1 failed in 0.07s ==================== (demo-HCIhX0Hq) E:\demo> ``` 这就是fixture最简单的应用,这个功能非常适合于当一个数据需要经过复杂的处理,但是这个数据对于测试用例来说就是个被测数据或者就是个入参的场景,如果没有fixture的应用,则只能通过定义函数的方式来实现了,而通过fixture的方式则显得非常简洁。
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/468
上一篇:
Pytest----测试函数使用parametrize参数化
下一篇:
Pytest----命令行如何控制不显示告警或将告警报错
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件