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
def setup_class(cls)
 Similarly, the following methods are called at class level before and after all test methods of the class are called: 

@classmethod
def teardown_class(cls)

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实现用例前后置的更多相关文章

  1. 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件

    目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...

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

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

  3. pytest 3.fixture介绍一 conftest.py

    前言: 前面一篇pytest2 讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录, ...

  4. pytest文档5-fixture之conftest.py

    前言 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录. ...

  5. pytest文档4-fixture之conftest.py

    用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然这就无法用setup和teardown来实现了.fixture之conftest.py就是自定义测试用例的预置条件 1.firture相对于 ...

  6. pytest_05_fixture之conftest.py

    前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录.很显然 ...

  7. pytest-fixture之conftest.py

    场景: 对于一个py文件中某些用例需要前置条件,某些用例不需要前置条件的情况,使用setup/teardown肯定是不方便的, 这时就需要自定义测试用例的前置条件. 1.fixture优点: 命名不局 ...

  8. unittest的前置后置,pytest的fixture和共享机制conftest.py

    Unittest setUp/tearDown setUp当中得到的变量,用self.xxx = value传递给测试用例 setUpClass/tearDownClass setupClass当中得 ...

  9. pytest框架+conftest.py配置公共数据的准备和清理

    1.pytest介绍:1.自动发现测试模块和测试方法 2.断言使用 assert+表达式即可 3.可以设置会话级.模块级.类级.函数级的fixture 数据准备+清理工作 4.丰富的插件库,==all ...

  10. pytest进阶之conftest.py

    前言 前面几篇随笔基本上已经了解了pytest 命令使用,收集用例,finxture使用及作用范围,今天简单介绍一下conftest.py文件的作用和实际项目中如是使用此文件! 实例场景 首先们思考这 ...

随机推荐

  1. STM32F4寄存器串口DMA汇总

    1.初始化 //RCC RCC->APB1ENR|=1<<20; //使能串口5时钟 RCC->APB1ENR|=1<<19; //使能串口4时钟 RCC-> ...

  2. 利用canvas+js完成滑块验证码中canvas部分思路

    1. 最终效果 2.滑块验证码思路 大概思路:设置两个画布,一个为显示图像的canvas画布,一个为拼图的block画布,block画布拼图内容从图像画布中的一部分裁剪得到(使用clip()),通过绑 ...

  3. 勇者sky遇上的命中注定的恋人白羽竟然是妹妹2

    题目大意 构造一个分段函数来拟合若干点(\(x_i , y_i\)),每一段是一个常函数,即 \[f(x)= \left \{ \begin{aligned} a_1& & (0\le ...

  4. Os-ByteSec

    Os-ByteSec 目录 Os-ByteSec 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 2 服务漏洞利用 2.1 检测smb服务漏洞 2.2 GetShell 3 提权 3.1 尝试提 ...

  5. CentOS 搭建 samba 服务器并通过 Windows 访问

    第一步 下载安装 samba.samba-client sudo yum -y install samba samba-client 终端提示安装完成 第二步 创建共享文件夹,这个文件夹到时候可以通过 ...

  6. ASP判断一个字符是否为汉字的两种方法

    有的时候我们要求用户一定要输入汉字的信息,比如姓名和地址.那么,如何判断一个字符是不是汉字呢?其实在asp中至少有两种方法: 一.直接将某字符用asc转为ascii码,如果是英文,他应该是0-127的 ...

  7. 实践:腾讯云IM搭建应用内类微信社交聊天模块

    社交模块是目前主流应用程序最常见的功能之一.有了社交模块,用户在您的应用内,可以自由的交流互动,并添加好友,关注其他用户等等.这可在很大程度上,促进您应用程序的活跃度,吸引用户留存,获取更多新用户,并 ...

  8. element的表格组件label宽度设置

  9. Java--判空方法

    方法有StringUtils.isBlank() , StringUtils.isNotBlank() , StringUtils.isEmpty(); 使用关系 StringUtils.isNotE ...

  10. CAN 接线参考

    汽车CAN总线详解 - 汽车人大空翼 - 博客园 (cnblogs.com) 汽车CAN总线 - helloWorld017 - 博客园 (cnblogs.com) CAN总线布线规范 - 不明白就去 ...