pytest:通过scope控制fixture的作用范围
一、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的作用范围的更多相关文章
- Pytest单元测试框架之FixTure基本使用
前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...
- Pytest(3)fixture的使用
fixture的优势 Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进: 命名方式灵活,不局限于 setup 和teardown 这几个命名 conf ...
- pytest 4.scope="module"介绍
前言: 上一篇讲到fixture通过scope参数控制setup级别,不填的时候默认 scope="function",那么接下来就会讲scope="module&quo ...
- pytest自动化4:fixture之yield实现teardown
出处:https://www.cnblogs.com/yoyoketang/p/9401554.html 前言: 上一篇介绍了fixture通过scope参数控制setup级别,我们一起来温故下fix ...
- pytest自动化3:fixture之conftest.py实现setup
出处:https://www.cnblogs.com/yoyoketang/p/9390073.html 前言: 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作 ...
- Pytest高级进阶之Fixture
From: https://www.cnblogs.com/feiyi211/p/6626314.html 一. fixture介绍 fixture是pytest的一个闪光点,pytest要精通怎么能 ...
- pytest.5.参数化的Fixture
From: http://www.testclass.net/pytest/parametrize_fixture/ 背景 继续上一节的测试需求,在上一节里,任何1条测试数据导致断言不通过后测试用例就 ...
- pytest初始化与清除fixture(二)
@pytest.fixture用法 1.导入pytest模块:import pytest 2.调用装饰器函数:@pytest.fixture(callable_or_scope=None,*args, ...
- pytest进阶使用【fixture(一)fixture与setup/teardown区别】
fixture翻译为装置. 我觉得名字是很贴合功能的,可以自由给函数装置上自己想要的功能. 当在说pytest比unitest灵活时,fixture肯定是其中的一个理由. 测试数据的准备和执行以后的数 ...
随机推荐
- 利用Python将PDF文档转为MP3音频
1. 转语音工具 微信读书有一个功能,可以将书里的文字转换为音频,而且声音优化的不错,比传统的机械朗读听起来舒服很多. 记得之前看到过Python有一个工具包,可以将文字转换为语音,支持英文和中文,而 ...
- 说说在 Python 中如何快速复制序列
1 基本用法 把序列乘以一个整数,就会产生一个新序列.这个新序列是原始序列复制了整数份,然后再拼接起来的结果. l=[1,2,3] l2=l * 3 logging.info('l2 -> %s ...
- .netcore3.1——应用AutoMapper
多层架构中存在多种模型,如视图模型ViewModel,数据传输对你DTO,ORM对象等,这些数据在层与层之间进行传输必须涉及类型之间的转换. AutoMapper是一个对象-对象映射器,作用是通过设置 ...
- WIN10系统下静态编译Qt4.8.7
qt-everywhere-opensource-src-4.8.7.tar.gz http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere- ...
- intellij IDEA Mybatis入门案例
最近打算学习ssm框架 Mybatis 作为入门的第一个持久层框架,学习起来实在费劲.故写此文章作为入门案例. 先打开 IDEA建立一个Maven项目,目录结构如下: 源代码已经上传至GitHub ...
- harbor安装实操笔记
纸上得来终觉浅,实操一遍吧! 把所有开发的后端服务先在打成镜像,传到私有镜像仓库: 然后在任意的远程机器拉取镜像,然后可采用docker或者docker-compose的方式运行,本节先按照docke ...
- java字符统计+字符串压缩
要实习了.突然发现自己好像什么都不会,就去看看题吧.在网上看到一个字符串压缩的题.看了一眼,感觉用python很简单.一个for循环+字典就可以搞定. 但是呢,主要还是java.下面就用java来实现 ...
- 单细胞分析实录(3): Cell Hashing数据拆分
在之前的文章里,我主要讲了如下两个内容:(1) 认识Cell Hashing:(2): 使用Cell Ranger得到表达矩阵.相信大家已经知道了cell hashing与普通10X转录组的差异,以及 ...
- Failed to create Spark client for Spark session
最近在hive里将mr换成spark引擎后,执行插入和一些复杂的hql会触发下面的异常: org.apache.hive.service.cli.HiveSQLException: Error whi ...
- js概念和ECMAScript
概念 就是一门浏览器客户端的脚本语言 运行在客户端浏览器中的,每一个浏览器都有JavaScript的解析引擎. 脚本语言,不需要编译,直接就可以被浏览器解析执行. 好处: 可以增强一些用户的 ...