『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)
1、Fixture装饰器的用途
- 做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用Fixture来实现。
- 测试用例的前置条件可以使用Fixture实现,比直接使用Pytest框架的
setup()和teardown()函数更加灵活。 - Fixture是Pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制!
- Fixture可以实现Unittest不能实现的功能,比如:Unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是Fixture却可以解决这个问题。
2、Fixture参数说明
可以使用pytest.fixture()查看fixture()函数的源码和所需要的参数,同Fixture装饰器需要的参数一样。
fixture(scope="function", params=None, autouse=False, ids=None, name=None):
说明:
scope:表示被@pytest.fixture()装饰器所标识方法的作用域。
作用域有四个级别,函数function(默认),类class,模块module,包package/session。
说明:function作用域包含函数和方法。params:一个可选的参数列表,用于做Fixture的参数化。
可将数据提供给其他的Fixture,或者所有测试使用它 。autouse:autouse=Ture则开启自动使用Fixture功能,也是调用Fixture函数一种方法。
Fixture装饰器会自动执行作用域范围内的所有用例的前后置。
autouse默认值为Flase。ids:一个字符串id的列表,即当使用params参数化时,给每一个值设置一个变量名。
如果没有提供ID,params将自动生成ID 。name:表示给被@pytest.fixture()装饰器修饰的方法取一个别名,调用时可以使用别名调用。
默认为装饰器所装饰的函数名称。
3、Fixture装饰器简单应用
使用Fixture装饰器来实现部分用例的前后置。
比如:我们在测试一个操作流程时,有的测试用例需要登陆,有的测试用例执行不需要用户登陆。
如果要直接使用setup_function()前置函数来实现,该文件中的所有用例执行前都需要进行用户登陆。
如下示例:
import pytest
# 函数级,前置函数
def setup_function():
print("用户登陆")
def test_add_cart():
print("添加购物车--需要登录")
def test_add_address():
print("添加收货地址--需要登录")
def test_browser_goods():
print("浏览商品--不需要登录")
if __name__ == '__main__':
pytest.main()
"""
执行结果:
用户登陆
添加购物车--需要登录
PASSED用户登陆
添加收货地址--需要登录
PASSED用户登陆
浏览商品--不需要登录
PASSED
"""
我们可以使用Fixture装饰器来实现部分用例的前后置,如下示例:
"""
1.学习目标
掌握pytest fixture定义
2.操作步骤
1.在定义的函数前添加装饰器
@pytest.fixture()
2.编写函数
@pytest.fixture()
def 函数名():
代码
3.使用fixture
在测试用例中,将上面定义的函数名称,当做参数传入到测试用例中即可
def test_xx(函数名):
用例步骤
"""
import pytest
# 步骤1
@pytest.fixture()
def login(): # 步骤3
print("输入账号,密码,进行登录")
def test_add_cart(login): # 步骤3
print("添加购物车--需要登录")
def test_add_address(login): # 步骤3
print("添加收货地址--需要登录")
def test_browser_goods():
print("浏览商品--不需要登录")
if __name__ == '__main__':
pytest.main()
"""
执行结果:
输入账号,密码,进行登录
添加购物车--需要登录
PASSED输入账号,密码,进行登录
添加收货地址--需要登录
PASSED浏览商品--不需要登录
PASSED
只有添加购物车,添加收货地址的用例,执行了登陆操作
"""
提示:Fixture装饰器既可以实现部分用例的前后置,也可以是现实全部用例的前后置,所以比单独使用前置
setup()函数和后置teardown()函数灵活多了。
4、yield执行后置函数
前面的示例,是在用例前加前置条件,相当于执行了setup()前置函数,既然有setup()前置函数那就会有teardown()后置函数,Fixture里面的teardown()后置函数用yield来唤醒。
示例:
import pytest
# 步骤1
@pytest.fixture()
def login(): # 步骤2
print("打开APP")
print("输入账号,密码,进行登录")
yield # 当用例执行完成后,执行yield后的代码
print("关闭APP")
def test_add_cart(login): # 步骤3
print("添加购物车--需要登录")
def test_add_address(login): # 步骤3
print("添加收货地址--需要登录")
if __name__ == '__main__':
pytest.main()
"""
执行结果:
打开APP
输入账号,密码,进行登录
添加购物车--需要登录
关闭APP
PASSED打开APP
输入账号,密码,进行登录
添加收货地址--需要登录
关闭APP
PASSED
"""
『德不孤』Pytest框架 — 11、Pytest中Fixture装饰器(一)的更多相关文章
- 『德不孤』Pytest框架 — 13、Pytest中Fixture装饰器(三)
目录 9.ids参数说明 10.name参数说明 11.scope参数说明 (1)scope="function" (2)scope="class" (3)sc ...
- 『德不孤』Pytest框架 — 12、Pytest中Fixture装饰器(二)
目录 5.addfinalizer关键字 6.带返回值的Fixture 7.Fixture实现参数化 (1)params参数的使用 (2)进阶使用 8.@pytest.mark.usefixtures ...
- 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...
- 『德不孤』Pytest框架 — 15、Pytest参数化
目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 1. ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- Typescript中的装饰器原理
Typescript中的装饰器原理 1.小原理 因为react中的高阶组件本质上是个高阶函数的调用, 所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器. 也就是说,装饰器的本质就是一 ...
- django ----CBV中加装饰器
CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...
- Python 标准库中的装饰器
题目描述 1.简单举例 Python 标准库中的装饰器 2.说说你用过的 Python 标准库中的装饰器 1. 首先,我们比较熟悉,也是比较常用的 Python 标准库提供的装饰器有:property ...
- 【Python】python中的装饰器——@
对装饰器本来就一知半解的,今天终于弄清楚了,Python中的装饰器是对装饰者模式的很好运用,简化到骨子里了. python中为什么需要装饰器,看这里:http://www.cnblogs.com/hu ...
随机推荐
- Markdown学习——Typora入门之常用操作语法及其快捷键
Markdown 学习--Typora入门 Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档. 由于Markdown的轻 ...
- openstack horizon 学习(3) DataTable
上一篇中粗略的讲了下openstack中horizon的dashboard和panel的添加,本打算在这章中对有关于pluggable settings中的配置做详细的总结,然放弃了这念头.原因是搞懂 ...
- 入门 - 复习Kubernetes核心概念 (八)
本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概 ...
- JavaWeb开发获取客户IP地址
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11737637.html 本地调试如果使用的是localhost进行访问, 则会获取到 0:0: ...
- Python--操作列表
Python--操作列表 目录 Python--操作列表 一.遍历整个列表 1. 深入研究循环 2. 在for循环中执行更多操作 3. 在for循环结束后执行一些操作 二.避免缩进错误 1. 忘记缩进 ...
- Mysql的基本操作知识
顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了. 笔记链接:http://p ...
- sqli-labs 1-22关
Page-1(Basic Challenges) Less 1-4 Less-(1-4)是最常规的SQL查询,分别采用单引号闭合.无引号.括号单引号闭合.括号双引号闭合,没有过滤:可以采用and '1 ...
- 虚拟机搭建web服务器
下载CentOS镜像 下载网址:阿里云镜像 选择版本(这里我使用的7) 选择isos/ 选择Minimal.iso,这个版本是最小镜像安装:没有图像界面 只有命令行 将CentOS安装到VM16中 注 ...
- 轻量级DI框架Guice使用详解
背景 在日常写一些小工具或者小项目的时候,有依赖管理和依赖注入的需求,但是Spring(Boot)体系作为DI框架过于重量级,于是需要调研一款微型的DI框架.Guice是Google出品的一款轻量级的 ...
- 数据分析实际案例之:pandas在泰坦尼特号乘客数据中的使用
目录 简介 泰坦尼特号乘客数据 使用pandas对数据进行分析 引入依赖包 读取和分析数据 图形化表示和矩阵转换 简介 1912年4月15日,号称永不沉没的泰坦尼克号因为和冰山相撞沉没了.因为没有足够 ...