1、setup和teardown

和unittest一样,pytest也有自己的前置后置条件:setup、teardown。但不同的是,pytest的类型比较多,多达10种,根据不同的生效范围分别为以下级别类型

模块级别:setup_module、teardown_module

函数级别:setup_function、teardown_function,不在类中的方法

类级别:setup_class、teardown_class

方法级别:setup_method、teardown_method

方法细化级别:setup、teardown

首先来看类级别以下的前置后置条件的使用

class Test_Case:def setup_class(self):print('-----setup_class')def teardown_class(self):print('-----teardown_class')def setup_method(self):print('-----setup_method')def teardown_method(self):print('-----teardown_method')def setup(self):print('-----setup')def teardown(self):print('-----teardown')def test_case1(self):print('这是---用例1')def test_case2(self):print('这是---用例2')if __name__ == '__main__':pytest.main(['./test_demo1.py', '-s'])

输出:

可以看到,先后顺序是类级别>方法级别>方法细化级别。但是这三个级别的方法都是在同一个类中生效的。剩余的模块级别则是全局的,在模块运行前后执行。而函数级别则是将不在类中的方法前后执行。

为了更方便理解,融入场景说明各个条件的作用

不过相比之下,除了类级别、方法级别的条件使用较频繁外,其他并不经常使用。此外,比使用更频繁的是pytest的"外壳函数"-fixture,能够对某条用例单独设置前后置条件。

2、fixture

Fixturepytest的核心功能,也是亮点功能,是一个装饰器函数,是用于将测试前后进行预备、清理工作的代码分离出核心测试逻辑的一种机制。作为pytest的 “外壳函数”,他可以当作参数传入,也可以返回值,而fixture机制的存在,也是pytest比unittest灵活的原因之一。

1、基本用法

在方法头前添加"@pytest.fixture(参数)",那么该方法就是个fixture函数了。而且fixture还可以配合“yield”完成后置条件的操作。

而调用fixture函数也有三种方法

1、用例前添加装饰器:@pytest.mark.usefixtures("fixture函数名")

2、fixture作为参数传入用例中

3、fixture使用autouse参数

@pytest.fixture()
def work():print('fixture:开始')yield 4print('fixture:结束')class Test_Case:def test_case1(self, work):print('fixture的返回值为:', work)print('这是---用例1')def test_case2(self):print('这是---用例2')if __name__ == '__main__':pytest.main(['./test_demo1.py', '-s'])

输出:

2、参数

此外,还可以添加scope、autouse等参数,用来表示fixture的作用域等,scope参数代表fixture的作用域,有4个作用范围:function、class、module、session

function:每个函数或方法都会调用(未填写默认为function级别)

class:每个类只调用1次

module:每个模块只调用1次

session:多个模块调用1次,通常写在conftest中

autouse参数表示在scope作用域中的用例无需填写fixture参数,默认为自动调用

3、其他

此外,fixture还支持相互调用,例如first作为scond的“前置条件”

@pytest.fixture()
def first():print('这是第一层fixture')@pytest.fixture()
def second(first):print('这是第二层fixture')class Test_Case:def test_case1(self, second):print('这是---用例1')if __name__ == '__main__':pytest.main(['./test_demo1.py', '-s'])

输出:

3、conftest.py

说简单点,其实就是fixture函数的集中管理,如果所有用例的前置条件都一样,那在每个用例文件中都创建fixture就很不方便,所以就要用到conftest.py的全局作用,conftest.py有以下特点:

1、与pytest.ini一样,文件名、文件类型固定。可以创建多个不同目录的conftest.py

2、pytest会默认读取conftest.py中的fixture函数

3、用例文件无需导入conftest.py,直接调用fixture即可

4、conftest.py只对同一目录下的所有用例生效

例如以下文件结构

最外层的conftest会对test_case和test_case2文件夹下的所有用例生效,一般用来生成driver、关闭浏览器、生成测试报告等配置,而test_case和test_case2中的conftest就针对不同需求配置不同fixture函数了。

Python自动化测试框架之Pytest相关用法-Fixture(2)相关推荐

  1. Python自动化测试框架之Pytest相关用法-基本使用(1)

    前期准备 需要准备:pytest库 执行命令:pip install pytest.由于已经安装好了,所以执行情况会如下图所示 安装完成后,如果能够导入说明安装成功可以使用了 Pytest相关 1.基 ...

  2. Python自动化测试框架之Pytest教程【让你小鸡变老鹰】

    Pytest  pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: · 简单灵活,容易上手 · 支持参数化 · 能够支持简单的单元测试和复杂的功能测试,还可以用来做sele ...

  3. python自动化测试框架pytest.pdf_Python自动化测试框架

    随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架.只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了开发时间.而且由于这些框架被广泛使用,他们具有很好的 ...

  4. 7个实用的Python自动化测试框架

    目录 前言 1.Unittest 2. Doctest 3.pytest 4.Nose 5.tox 6.Unittest2 7.mock unittest. 结语 前言 随着技术的进步和自动化技术的出 ...

  5. Python自动化测试框架【Allure-pytest功能特性介绍】

    Python自动化测试框架[Allure-pytest功能特性介绍] 目录:导读 前言 生成报告 测试代码 目录结构 Allure特性 Environment Categories Fixtures ...

  6. Python单元测试框架之pytest 3 -- fixtures

    From: https://www.cnblogs.com/fnng/p/4769020.html Python单元测试框架之pytest -- fixtures 2015-08-29 13:05 b ...

  7. Python自动化测试框架有哪些?

    令开发者万分高兴的是,开发自己的测试框架的日子终于结束了.以前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架.一个测试框架应该具有最佳的测试 ...

  8. Python学习教程:Python自动化测试框架需要学习哪些?

    需要掌握学习Python自动化测试框架有哪些?常用的Python自动化测试框架有Robot Framework.Pytest.UnitTest/PyUnit.Behave.Lettuce.软件测试的自 ...

  9. Python自动化测试框架有哪些?怎么选

    目录 自动化测试框架概念 自动化测试框架根据思想理念和深度不同,渐进式的分为以下几种: 模块化测试脚本框架: 测试库框架: 数据驱动测试框架: 关键字驱动或表驱动的测试框架: 混合测试自动化框架: 框 ...

最新文章

  1. Activity的使用(四):两个activity的交互
  2. 人工智能与电气工程及其自动技术论述
  3. 2019年中国十大人才发展趋势
  4. 大数据工作流_大数据和人工智能时代下的数字化工作流
  5. 面向区块链的高效物化视图维护和可信查询
  6. flutter和webapp_Flutter 适配移动端和web不同尺寸
  7. java线程交替执行_Java synchronized线程交替运行实现过程详解
  8. 二十四 Redis消息订阅事务持久化
  9. 窥探Swift之新添数据类型元组与可选值
  10. 微信小程序云开发教程-后端接口分析和接口返回值的格式定义
  11. Windows11 开发版bt磁力链种子及其他下载地址整理
  12. stm32晶振匹配电容_晶振的匹配电容选择
  13. 国税局验证码识别 | 不讲武德篇
  14. distinct 和order by 冲突解决方案
  15. 今天小暑是什么时间_2020年小暑具体时间是几点几分?小暑是什么意思?
  16. 学习英文-学以致用【场景:程序员英文-开发环境】
  17. 发表Nature等杂志四十多篇论文老师带您学单细胞测序数据挖掘和课题设计 2020年1月11-12日 上海...
  18. 原创|实时数仓实战项目-第三节(数仓治理)
  19. 京东炸年兽脚本--亲测有效 2021最新版
  20. 取消研究生论文发表需求,985大学官宣!

热门文章

  1. Segment Anything论文详解(SAM)
  2. Proxyee Down简介
  3. 室外无线覆盖解决方案
  4. 电烙铁的焊接方法图解
  5. Unity3d操作的一些技巧知识点和BUG解决方案
  6. Cobalt Strike的安装
  7. PayPal收款手续费是多少钱?
  8. 基于JavaWeb的网上购物系统开发(含代码)
  9. android view.setVisibility 不显示问题
  10. Windows驱动_文件系统微小过滤驱动之三微小过滤驱动的操作