ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pytest之fixture函数的应用

2021-06-15 18:33:47  阅读:139  来源: 互联网

标签:调用 函数 fixture pytest 测试用例 参数


目录

一、fixture简介

  固件(fixture)是一些函数,pytest会在执行测试函数之前(或之后)加载运行他们。我们可以利用固件在程序运行前做初始化,运行后做清场,其中最常见的可能就是数据库的初始连接和最后关闭。pytest使用pytest.fixture()定义固件。

二、fixture功能

  • fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。
  • fixture有明确的名字,在其他函数,模块,类或整个工程调用它时会被激活。
  • fixture是基于模块来执行的,每个fixture的名字就可以触发一个fixture的函数,它自身也可以调用其他的fixture。 我们可以把fixture看做是资源,在你的测试用例执行之前需要去配置这些资源,执行完后需要去释放资源。比如module类型的fixture 适合于那些许多测试用例都只需要执行一次的操作。
  • fixture还提供了参数化功能,根据配置和不同组件来选择不同的参数。
  • fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。

三、fixture优势

  • 命名方式灵活,不局限于 setup 和teardown 这几个命名
  • conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
  • scope=“module” 可以实现多个.py 跨文件共享前置
  • scope=“session” 以实现多个.py 跨文件使用一个 session 来完成多个用例

四、fixture参数列表

1、示例代码:

@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)   
def test():
	print("fixture初始化的参数列表")

2、参数列表 :

  • scope:可以理解成fixture的作用域,默认:function,还有class、module、package、session四个常用
  • autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
  • name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name

注意:
session的作用域:是整个测试会话,即开始执行pytest到结束测试

五、fixture使用

使用fixture函数需要两步:

  1. 定义fixture函数
  2. 如何调用:在函数括号中填写fixture函数、使用@pytest.mark.usefixtures(“login”)装饰器

如:
在这里插入图片描述
test_1和test_2都会输出‘输入账号,密码,登录’
执行结束后的清场操作:
在这里插入图片描述
执行结果:
在这里插入图片描述
Python三大器:

  • 生成器: yield 生成器就是特殊的迭代器,边计算边遍历,节省了内存
  • 迭代器: 能用for …in…循环遍历
  • 装饰器: @pytest.fixture(scope=‘function’,autouse=True) @符号
    作用:给在不改变原来函数功能的前提下,增加额外的功能,体现代码的复用性

六、fixture简单应用

在这里插入图片描述

标签:调用,函数,fixture,pytest,测试用例,参数
来源: https://blog.csdn.net/adorable_/article/details/117930159

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有