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. lua 控制语句

    for循环 模式1 for k,v in f, data, init_k do end 进行的操作是 f(data, old_k), 例如f(data, init_k) 渴望返回的是 new_k, v ...

  2. C++练习2 强制类型转换

    const可以把有关的数据定义为常量. const类型可以修饰:对象,指针,引用 使用const_cast为强制类型转换,将常量强制转换非常量. 1 #include <iostream> ...

  3. java基础(数组、面向抽象编程、static、异常)

    数组 相同的数据类型的数据集合 按照一定的先后次序排列组合 通过下标来访问他们 声明---创建 建议 String[] a; String a [];//c 和c++才有不专业 String [] a ...

  4. 安卓逆向.5 xposed 替换方法-(实战贪吃蛇)

    代码剖析 调用成功方法 获取类 方法写入 实战例子(贪吃蛇)

  5. Centos 7.x系统下忘记用户登录密码,重置密码的方法

    转载csdn: Centos 7.x系统下忘记用户登录密码,重置密码的方法_ATree的博客-CSDN博客_centos7密码忘记 重置密码的方法 Centos7修改root密码_shanvlang的 ...

  6. div 元素内容超出可通过鼠标滚轮实现横向滚动

    移动端中的元素内容超出时,对容器设置overflow-x: auto就可以通过手势水平移动.但是 PC 端只能通过鼠标滚轮上下滑动,而不能水平移动. 只需要给元素添加一个监听鼠标滚轮事件,上下滑动时修 ...

  7. PostGIS之地理坐标

    1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...

  8. (七) Mysql 之 binlog redolog 二阶段提交

    (一)背景知识: 1 binlog binlog 我们中文一般称作归档日志, 是 MySQL Server 层的日志,而不是存储引擎自带的日志,它记录了所有的 DDL 和 DML(不包含数据查询语句) ...

  9. EMQ X 系统调优和性能压测

    前言 如果使用 EMQ 来承载百万级别的用户连接可以吗?毕竟在 MQTT 官方介绍上说 EMQ X 可以处理千万并发客户端,而 EMQ X 自己官方称 4.x 版本 MQTT 连接压力测试一台 8 核 ...

  10. Windows 干净启动

    1. 卸载设备中全部的第三方反病毒软件与系统优化软件 (例如 360.腾讯电脑管家.鲁大师等).2. 按 "Windows 徽标键+R",输入 "msconfig&quo ...