2、fixture机制
一、fixture机制
通俗的讲:fixture=前置+后置
主要目的是可以让我们自定义测试用例的前置条件。
1、conftest文件
设置conftest.py文件,放所有的前置和后置函数,通过设置fixture的作用域,可实现数据共享;
2、把函数声明为fixture
在函数前面加上 @pytest.fixture(作用级别=默认为function),表明这是一个预置函数,方便用户调用;
3、fixture定义
如果有返回值,那么写在yield后面。(yield的作用相当于return)
yield关键字之前的代码,是环境准备;之后的代码,就是环境清理的代码,即在测试用例执行完成之后会执行的代码。
#conftest.py文件
import pytest
@pytest.fixture(scope="function",autouse=True)
def description():print("这是一个conftest文件")@pytest.fixture(scope="function",autouse=False)
def get_code():code="200"return code@pytest.fixture(scope="session",autouse=True)
def get_token():token="qeehfjejwjwjej11sss@22";print("获取到token:%s"%token)return token
二、fixture 参数列表
@pytest.fixture(scope="function",params=None,autouse=False,ids=None,name=None) def test(): print("fixture初始化的参数列表")
1、scope
- 用于控制Fixture的作用范围
- 作用类似于Pytest的setup、teardown
- 默认取值未function(函数级别),控制范围的排序为:session>module>class>function
取值 |
范围 |
说明 |
function |
函数级 |
每一个函数或方法都会调用(默认值) |
class |
类级别 |
每个测试类只运行一次 |
module |
模块机 |
每一个.py文件调用一次 |
session |
会话级 |
每次会话只需要运行一次,多个.py跨文件使用一个session来完成多个用例。 整个测试会话,即开始执行pytest到结束测试; |
2、params
可选的参数列表,它将导致多个参数调用 fixture 功能和所有测试使用它。
3、ids--每个字符串id的列表,
- 用例标识ID
- 与params 配合使用,一对一关系
4、autouse
- 默认false;
- 若为True,刚每个测试函数都会自动调用该fixture,无需传入fixture函数名
5、Name
- fixture的重命名
- 使用fixture的测试函数会将fixture的函数名作为参数传递,但是pytest也允许将fixture重命名;
- 如果使用了name,那只能将name传,函数名不再生效;
- 调用方法:@pytest.mark.usefixture('fixture1','fixture2');
三、通过conftest.py 共享fixture
1、共享fixture
fixture 可以放在单独的测试文件里。如果你希望多个测试文件共享fixture,可以在某个公共目录下新建一个conftest.py 文件,将fixture 放在其中,这样该项目中的所有测试都能共享其中的fixture。
如果你希望 fixture 的作用域仅限于某个测试文件,那么将它写在该测试文件里,也可以在tests目录的子目录下创建新的conftest.py文件,低一级的conftest.py 中的fixture可以供所在目录及其子目录下的测试使用。
四、调用fixture的三种方法
1、函数或类里面方法直接传 fixture 的函数参数名称
2、使用装饰器 @pytest.mark.usefixture(fixture_name) 装饰需要运行的用例;
叠加 usefixture,如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture() 进行叠加,注意叠加顺序,先执行的放底层,后执行的放上层。
3、根据fixture的作用域及autouse参数,确定调用fixture的方式。
例如:当fixture的参数autouse为True时,每次执行方法前都会调用方法;
4、示例:
import pytest# 调用方式一:传fixture的函数参数名称
@pytest.fixture
def login():print("输入账号,密码先登录")
def test_s1(login):print("用例 1:登录之后其它动作 111")
def test_s2(): # 不传 loginprint("用例 2:不需要登录,操作 222")# 调用方式二:使用装饰器
@pytest.fixture
def login2():print("please输入账号,密码先登录")
@pytest.mark.usefixtures("login2")
def test_s11():print("用例 11:登录之后其它动作 111")# 调用方式三:autouse=True
@pytest.fixture(autouse=True)
def login3():print("====auto===")# 不是test开头,加了装饰器也不会执行fixture
@pytest.mark.usefixtures("login2")
def loginss():print(123)
5、注意
- 在类声明上面加@pytest.mark.usefixtures(),代表这个类里面所有测试用例都会调用该fixture;
- 可以叠加多个@pytest.mark.usefixtures(),先执行的放底层,后执行的放上层
- 可以传多个fixture参数,先执行的放前面,后执行的放后面
- 如果fixture有返回值,用@pytest.mark.usefixtures() 是无法获取到返回值的,必须用传参的方式(方式一)
五、fixture的实例化顺序
1、较高scope范围的fixture(session)在较低scope范围的fixture(function、class)之前实例化【session>package>module>class>function】
2、具有相同作用域的fixture遵循测试函数中声明的顺序,并遵循fixture之间的依赖关系。
3、自动使用(autouse=True)的fixture将在显式使用(传参或装饰器)的fixture之前实例化。
六、关于fixture的注意点
1、添加了@pytest.fixture,如果fixture还想依赖其他fixture,需要用函数传参的方式,不能用@pytest.mark.usefixtures() 的方式,否则会不生效。
六、示例
1、返回数值的简单fixture
import pytest
@pytest.fixture()
def some_data():return 42def test_some_data(some_data):assert some_data==42if __name__ == '__main__':pytest.main()
2、说明
@pytest.fixture() 装饰器用于声明函数是一个 fixture。如果测试函数列表中包含fixture名,那么pytest会检测到,并在测试函数运行之前执行该fixture。fixture可以完成任务,也可以返回数据给测试函数。
2、fixture机制相关推荐
- Python自动化测试框架之Pytest相关用法-Fixture(2)
1.setup和teardown 和unittest一样,pytest也有自己的前置后置条件:setup.teardown.但不同的是,pytest的类型比较多,多达10种,根据不同的生效范围分别为以 ...
- 测试面试题集锦(五)| 自动化测试与性能测试篇(附答案)
简介:本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的.网络搜集(完善).工作日常讨论等,分为以下十个部分,供大家参考.如有错误的地方,欢迎指正.有更多的面试题或面试中遇到 ...
- allure 测试报告本地打开_Pytest和Allure测试框架(二)
七, 单元自动化测试pytest和allure在测试中应用 自动执行 1, 单元测试测试报告展示 2, conftest中编写driver,范围session,使用 addfinalizer在测试结束 ...
- 测试面试题,自动化测试与性能测试篇(附答案)
本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的.网络搜集(完善).工作日常讨论等,分为以下十个部分,供大家参考.如有错误的地方,欢迎指正.有更多的面试题或面试中遇到的坑, ...
- 单元测试界的高富帅,Pytest框架,手把手教学,高阶用法实战
一.xunit 风格的前后置方法 1.函数用例的前后置方法 在模块中以函数形式定义用例,可以通过 setup_function 和 teardown_function 来定义函数用例的前后置方法,使用 ...
- 又来?软件测试之接口自动化面试题汇总
一.请问你是如何做接口测试的? 大体来说,经历以下过程:接口需求调研.接口测试工具选择.接口测试用例编写.接口测试执行.接口测试回归.接口测试自动化持续集成.具体来说,接口测试流程分成以下九步: 第一 ...
- Pytest setup teardown
目录 如何实现xunit样式setup\teardown 模块级setup/teardown 类级别setup/teardown 方法和功能级别setup/teardown 如何实现xunit样式se ...
- 字节跳动(头条)月薪 18k 招的人,有多特别?
我作为一名历经沧桑,看透互联网行业百态的测试从业者,最近在被面试过程中遇到了许多问题,就自己的经历来分析下作为测试工程师跳槽前应该准备哪些知识,才能在面试官面前表现出众. 如果你的跳槽意向已经很确定, ...
- Pytest和Allure测试框架-超详细版+实战
加我微信:hz223336,领取pytest视频 文章目录 一:pytest的介绍,安装,框架结构,执行方式 1,特点 2,安装 3, pytest的框架结构 4,执行方式 二:Pytest -断言. ...
最新文章
- 星巴克不使用两阶段提交
- 局域网怎样自动安装FLASH插件(浏览器不安装flashplayer都可以浏览.swf文件)
- Spark学习之路(二)
- tf.split()
- C#调用C++ DLL的方式
- 运维监控之Nagios实战(五)Nagios QL3.11
- 43行代码AC_HDU-2604 Queuing(矩阵快速幂,附详细的知识讲解、模板例题)
- An Introduction to Our Code Breaking Team
- CALL SYMPUT与CALL SYMPUTX区别
- 服务器网站链接ip限制,apache服务器对同一IP地址的连接限制
- 发布npm时遇到的两个小问题,解决方法
- [机器学习]机器学习常用的模型评估方法
- C++ Interesting卡常数
- U盘写保护、不可访问、无法格式化问题的解决办法
- 海词词典android v3.1.2新版发布 英语学习必备工具,海词词典Android V3.1.2新版发布 英语学习必备工具...
- 为什么管理创新总是发生在汽车行业?
- Winrar 4.0破解
- 有趣的设计模式——从一杯奶茶品味装饰模式
- 从安装jdk开始(安装jdk的步骤)
- IDEA 断点调试,为啥断点没有起作用