一、fixture里面有个参数scope,通过scope可以控制fixture的作用范围,根据作用范围大小划分:session>module>class>function,具体作用范围如下:

1.function 函数或者方法级别都会被调用

2.class 类级别调用一次

3.module 模块级别调用一次

4.session 是个多文件调用一次(可以跨 .py 文件调用,每个.py文件就是 module)

例如整个模块有多条测试用例,需要在全部用例执行之前打开浏览器,全部执行完之后去关闭浏览器,打开和关闭操作只执行一次,如果每次都要重新执行打开操作,会非常占用系统资源,这种场景除了 setup——module,teardown_module 可以实现,还可以通过设置模块级别的 fixture装饰器【@pytst.fixture(scope="module")】来实现

scope='module'

fixture 参数 scope=‘module’ ,module作用是整个模块都会生效

#!/usr/bin/env python
# _*_coding: utf-8 _*_
import pytest @pytest.fixture(scope='module')
def open():
print("打开浏览器")
yield print("执行teardown !")
print("最后关闭浏览器") @pytest.mark.usefixtures("open")
def test_search1():
print("test_search1")
raise NameError
pass def test_search2():
print("test_search2")
pass def test_search3():
print("test_search3")
pass

代码解析:@pytest.fixture()如果不写参数,参数默认scope=‘function’。当scope='module'时,在当前 .py脚本里面所有的用例开始前只执行一次。scope巧妙与yield组合使用,相当于setup和teardown方法。还可以使用@pytest.mark.usefixtures装饰器,传入前置函数名作为参数

运行结果如下:

Testing started at 12:03 ...
C:\Python\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1\helpers\pycharm\_jb_pytest_runner.py" --path C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_fixture_scope.py
Launching pytest with arguments C:/Users/wanwen/PycharmProjects/vigo/xuexi/20210123/test_fixture_scope.py in C:\Users\wanwen\PycharmProjects\vigo\xuexi\20210123
============================= test session starts =============================
platform win32 -- Python 3.8.0, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: C:\Users\wanwen\PycharmProjects\vigo\xuexi\20210123
plugins: html-2.1.1, metadata-1.11.0, ordering-0.6collected 3 items test_fixture_scope.py 打开浏览器
Ftest_search1 test_fixture_scope.py:14 (test_search1)
@pytest.mark.usefixtures("open")
def test_search1():
print("test_search1")
> raise NameError
E NameError test_fixture_scope.py:18: NameError
.test_search2
.test_search3
执行teardown !
最后关闭浏览器
[100%] ================================== FAILURES ===================================
________________________________ test_search1 _________________________________ @pytest.mark.usefixtures("open")
def test_search1():
print("test_search1")
> raise NameError
E NameError test_fixture_scope.py:18: NameError
---------------------------- Captured stdout setup ----------------------------
打开浏览器
---------------------------- Captured stdout call -----------------------------
test_search1
=========================== short test summary info ===========================
FAILED test_fixture_scope.py::test_search1 - NameError
========================= 1 failed, 2 passed in 0.19s ========================= Process finished with exit code 0 Assertion failed Assertion failed

从上面运行结果可以看出scope=‘module’ 和yield结合,相当于setup_module 和teardown_module方法,整个模块运行之前调用open()方法中的yield前面打印输出 的打开浏览器 ,整个运行之后调用了yield后面的打印语句执行teardown与关闭浏览器,yield来唤醒teardown的执行,如果用例出现异常,不影响yield后面teardown执行

可以使用 @pytest.mark.usefixtures装饰器来进行方法的传入

pytest:通过scope控制fixture的作用范围的更多相关文章

  1. Pytest单元测试框架之FixTure基本使用

    前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...

  2. Pytest(3)fixture的使用

    fixture的优势 Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进: 命名方式灵活,不局限于 setup 和teardown 这几个命名 conf ...

  3. pytest 4.scope="module"介绍

    前言: 上一篇讲到fixture通过scope参数控制setup级别,不填的时候默认 scope="function",那么接下来就会讲scope="module&quo ...

  4. pytest自动化4:fixture之yield实现teardown

    出处:https://www.cnblogs.com/yoyoketang/p/9401554.html 前言: 上一篇介绍了fixture通过scope参数控制setup级别,我们一起来温故下fix ...

  5. pytest自动化3:fixture之conftest.py实现setup

    出处:https://www.cnblogs.com/yoyoketang/p/9390073.html 前言: 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作 ...

  6. Pytest高级进阶之Fixture

    From: https://www.cnblogs.com/feiyi211/p/6626314.html 一. fixture介绍 fixture是pytest的一个闪光点,pytest要精通怎么能 ...

  7. pytest.5.参数化的Fixture

    From: http://www.testclass.net/pytest/parametrize_fixture/ 背景 继续上一节的测试需求,在上一节里,任何1条测试数据导致断言不通过后测试用例就 ...

  8. pytest初始化与清除fixture(二)

    @pytest.fixture用法 1.导入pytest模块:import pytest 2.调用装饰器函数:@pytest.fixture(callable_or_scope=None,*args, ...

  9. pytest进阶使用【fixture(一)fixture与setup/teardown区别】

    fixture翻译为装置. 我觉得名字是很贴合功能的,可以自由给函数装置上自己想要的功能. 当在说pytest比unitest灵活时,fixture肯定是其中的一个理由. 测试数据的准备和执行以后的数 ...

随机推荐

  1. Python小白干货宝典:sorted()函数:列表元素排序

    定义: sorted() 函数对所有可迭代的对象进行排序操作. 内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作. 语法: sorted 语法: sorted(i ...

  2. 前中后序递归遍历树的体会 with Python

    前序:跟->左->右 中序:左->根->右 后序:左>右->根 采用递归遍历时,编译器/解释器负责将递归函数调用过程压入栈并保护现场,在不同位置处理根节点即可实现不 ...

  3. kvm环境部署及常用指令

    Linux下通过kvm创建虚拟机,通过vnc连接,做好配置后,通过ssh登录,并开启iptables Kvm虚拟化搭建教程参考链接:https://jingyan.baidu.com/article/ ...

  4. 测试常用sql语句

    一.查询数值型数据:SELECT * FROM tb_name WHERE sum > 100;查询谓词:>,=,<,<>,!=,!>,!<,=>,=& ...

  5. 2021韩顺平图解Linux课程(全面升级)基础篇

    第1章 Linux 开山篇-内容介绍 本套 Linux 课程内容 Linux 主要应用领域:服务器 第2章 Linux 基础篇-Linux 入门 Linux 之父 Linus Torvalds Git ...

  6. springboot 中yml配置

    springboot 中各种配置项纪录 1. @Value 最早获取配置文件中的配置的时候,使用的就是这个注解,SpEL表达式语言. // 使用起来很简单 @Value("${config. ...

  7. 当Thymeleaf遇到向js中传值的操作

    在使用Thymeleaf的时候.关于一些点击操作非常头疼.往往需要向JS里面传递各种东西. 然而,在用Thymeleaf的时候.js操作需要拼接语句.但是又不好拼接. 关于一些操作,一般也是在表格中. ...

  8. Media Queries媒体查询

    Media Queries能在不同的条件下使用不同的样式,使页面在不同在终端设备下达到不同的页面效果.Media Queries有其自己的使用规则.一个媒体查询由一个可选的媒体类型和媒体特性表达式,使 ...

  9. centos7下mysql安装与卸载

    彻底卸载mysql 一.chak 是否有安装mysql a)      rpm -qa | grep -i mysql // 查看命令1 b)      yum list install mysql* ...

  10. IT 界那些朗朗上口的“名言

    中国有很多古代警世名言,朗朗上口,凝聚了很多故事与哲理.硅谷的互联网公司里头也有一些这样的名言,凝聚了很多公司价值观和做事的方法,对于很多程序员来说,其影响潜移默化.这里收集了一些,如下. Stay ...