pytest-2 之前后置及 conftest.py+fixture+yield实现用例前后置
pytest测试用例及类级别的前置,可以和unittest一样进行定义,也可以把该前置方法或类定义到conftest.py里,而在需要前置的方法的参数里加上该前置名作为参数;
pytest有两种方式来设置用例的前后置;
一、方式一:直接使用pytest本身的前后置方法
| 模块级别的前后置 |
def setup_module(module) |
在一个模块内的测试用例前后,只运行一次 ; which will usually be called once for all the functions |
def teardown_module(module) |
||
Class level setup/teardown |
@classmethod |
Similarly, the following methods are called at class level before and after all test methods of the class are called: |
@classmethod |
||
Method and function level setup/teardown |
def setup_method(self, method) |
the following methods are called around each method invocation |
def teardown_method(self, method): |
||
def setup_function(function): |
||
def teardown_function(function): |
||
:
1、用例级别的前后置方法: setup() 和teardow() 按官方说法不是pytest原生的,是nose 支持的一部分;原生的是setup_method(),teardown_method();官方原话是:(Native pytest support uses setup_method and teardown_method))
2、类级别的前后置方法:setup_class(),teardown_class()
pytest官方文档:https://docs.pytest.org/en/latest/contents.html
二、方式二,conftest.py+fixture+yield ,实现用例的前后置
pytest的测试夹具,fixture的定义及作用域:
相当于装饰器,需要@pytest.fixture()来装饰;不同的scope代表了不同的作用域
@pytest.fixture() #默认是function级别,每个function(方法/函数)都会执行
作用域
1、@pytest.fixture(scope='function'),定义用例级别的前后置方法;每个用例前后都执行该前后置;默认是function
2、@pytest.fixture(scope='class'),定义类级别的前后置方法;类内的所有方法执行前,只执行一次该前置;类内的所有方法执行之后,执行该后置
3、scope=module,作用于整个模块,每个模块的所有test运行,只执行该夹具一次;(一个.py文件,就是一个module)
4、scope=session,作用于整个session(慎用),每个session只运行一次;(多个文件调用一次)
scope值不同,代表了不同的作用域;作用域的大小 session>module>class>function
调用:
1、在用例方法的参数中,写上前后置的方法名
2、在定义前后置方法的时候(设置参数autouse=True),这样设置,定义的前后置方法会自动执行(用的比较少)
3、类级别的前后置,如果调用时需要调用的话,在第一个方法里,加上类名
注意点:前后置方法可以统一放到conftest.py文件中,而用例文件中可以直接使用,不需要导入;
pytest用例的执行顺序,同一个文件按照用例文件代码的前后顺序执行
多个文件的执行顺序,是按文件名的ASCII码排序
三、实例
import pytest @pytest.fixture(scope='function') # 默认scope是function,是用例级别
def test_case():
print('---用例前置代码---')
yield
print('---用例后置代码--') @pytest.fixture(scope='class')
def cls_case():
print('--类级别前置--')
yield
print('---类级别后置---') # 类级别的前后置,如果调用时需要调用的话,在第一个方法里,加上类名
def test_01(test_case,cls_case):
print('case01')
assert 1==1
# @pytest.mark.parametrize()
def test_02(test_case):
print('case02')
assert 2==2
运行结果:
============================= test session starts =============================
platform win32 -- Python 3.7.9, pytest-7.1.2, pluggy-1.0.0
rootdir: D:\python35_zdh\py35_xxx\xxx_pytest, configfile: pytest.inicollected 2 items test_login.py --类级别前置--
---用例前置代码---
.case01
---用例后置代码--
---类级别后置---
---用例前置代码---
.case02
---用例后置代码--
[100%] ============================== 2 passed in 0.03s ==============================
Process finished with exit code 0
pytest-2 之前后置及 conftest.py+fixture+yield实现用例前后置的更多相关文章
- 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...
- pytest自动化3:fixture之conftest.py实现setup
出处:https://www.cnblogs.com/yoyoketang/p/9390073.html 前言: 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作 ...
- pytest 3.fixture介绍一 conftest.py
前言: 前面一篇pytest2 讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录, ...
- pytest文档5-fixture之conftest.py
前言 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录. ...
- pytest文档4-fixture之conftest.py
用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然这就无法用setup和teardown来实现了.fixture之conftest.py就是自定义测试用例的预置条件 1.firture相对于 ...
- pytest_05_fixture之conftest.py
前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然 ...
- pytest-fixture之conftest.py
场景: 对于一个py文件中某些用例需要前置条件,某些用例不需要前置条件的情况,使用setup/teardown肯定是不方便的, 这时就需要自定义测试用例的前置条件. 1.fixture优点: 命名不局 ...
- unittest的前置后置,pytest的fixture和共享机制conftest.py
Unittest setUp/tearDown setUp当中得到的变量,用self.xxx = value传递给测试用例 setUpClass/tearDownClass setupClass当中得 ...
- pytest框架+conftest.py配置公共数据的准备和清理
1.pytest介绍:1.自动发现测试模块和测试方法 2.断言使用 assert+表达式即可 3.可以设置会话级.模块级.类级.函数级的fixture 数据准备+清理工作 4.丰富的插件库,==all ...
- pytest进阶之conftest.py
前言 前面几篇随笔基本上已经了解了pytest 命令使用,收集用例,finxture使用及作用范围,今天简单介绍一下conftest.py文件的作用和实际项目中如是使用此文件! 实例场景 首先们思考这 ...
随机推荐
- STM32F4寄存器串口DMA汇总
1.初始化 //RCC RCC->APB1ENR|=1<<20; //使能串口5时钟 RCC->APB1ENR|=1<<19; //使能串口4时钟 RCC-> ...
- 利用canvas+js完成滑块验证码中canvas部分思路
1. 最终效果 2.滑块验证码思路 大概思路:设置两个画布,一个为显示图像的canvas画布,一个为拼图的block画布,block画布拼图内容从图像画布中的一部分裁剪得到(使用clip()),通过绑 ...
- 勇者sky遇上的命中注定的恋人白羽竟然是妹妹2
题目大意 构造一个分段函数来拟合若干点(\(x_i , y_i\)),每一段是一个常函数,即 \[f(x)= \left \{ \begin{aligned} a_1& & (0\le ...
- Os-ByteSec
Os-ByteSec 目录 Os-ByteSec 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 2 服务漏洞利用 2.1 检测smb服务漏洞 2.2 GetShell 3 提权 3.1 尝试提 ...
- CentOS 搭建 samba 服务器并通过 Windows 访问
第一步 下载安装 samba.samba-client sudo yum -y install samba samba-client 终端提示安装完成 第二步 创建共享文件夹,这个文件夹到时候可以通过 ...
- ASP判断一个字符是否为汉字的两种方法
有的时候我们要求用户一定要输入汉字的信息,比如姓名和地址.那么,如何判断一个字符是不是汉字呢?其实在asp中至少有两种方法: 一.直接将某字符用asc转为ascii码,如果是英文,他应该是0-127的 ...
- 实践:腾讯云IM搭建应用内类微信社交聊天模块
社交模块是目前主流应用程序最常见的功能之一.有了社交模块,用户在您的应用内,可以自由的交流互动,并添加好友,关注其他用户等等.这可在很大程度上,促进您应用程序的活跃度,吸引用户留存,获取更多新用户,并 ...
- element的表格组件label宽度设置
- Java--判空方法
方法有StringUtils.isBlank() , StringUtils.isNotBlank() , StringUtils.isEmpty(); 使用关系 StringUtils.isNotE ...
- CAN 接线参考
汽车CAN总线详解 - 汽车人大空翼 - 博客园 (cnblogs.com) 汽车CAN总线 - helloWorld017 - 博客园 (cnblogs.com) CAN总线布线规范 - 不明白就去 ...