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文件的作用和实际项目中如是使用此文件! 实例场景 首先们思考这 ...
随机推荐
- 2021级《JAVA语言程序设计》上机考试试题1
昨天进行了期末考试,考的不够理想,看见题没思路,到了10点半刚刚进入状态,11点半结束....... 这是学生的试题要求(按照评分卡上的来,卷子上要求和评分卡不一致(.......)) 这是登录页面 ...
- day14-异常处理
异常处理 1.基本介绍 SpringMVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler映射.数据绑定以及目标方法执行时发生的异常 有两种方案来进行异常 ...
- 记一次完整的PHP代码审计——yccms v3.4审计
一.环境搭建与使用工具 (一)环境搭建 打开源码查看安装要求 PHP 5.4+,Mysql 5.0.*,直接使用phpstudy配置即可 查看源码目录结构,发现是mvc模式的,那么我们重点关注的就是c ...
- ubuntu 一键安装lnmp环境
转载csdn: ubuntu 一键安装lnmp环境_手艺人小在的博客-CSDN博客 注意:采用编译安装方法,花费时间较长,这个只有稳定版的,没有高版本的. 转载vpsgo: Linux上一键安装LNM ...
- Linux提权之:利用capabilities提权
Linux提权之:利用capabilities提权 目录 Linux提权之:利用capabilities提权 1 背景 2 Capabilities机制 3 线程与文件的capabilities 3. ...
- vscode+eslint项目规范化,自动格式化配置(项目中用到的)
项目如果没有格式化插件就会变得十分拥挤,并且因为个人的开发习惯不同,会导致多人配合的时候,某些人的格式不能与你的兼容 导致项目大面积冲突,这样一来统一的格式和开发规范就十分必要了. 1.下载使用vsc ...
- JAVA快速获取网络图片或者URL图片并保存到本地
JAVA快速获取网络图片或者URL图片并保存到本地,直接上代码: package com.xh.service;import org.springframework.stereotype.Servic ...
- 多个mysql版本并行运行
mysql管理工具:mysql服务器需要客户端连接到服务器上进行管理.客户端有可能是个软件,也有可能是个java程序 安装mysql启用服务起别名+登录账号①mysqld install -m8;ne ...
- Appium的触屏操作&设备交互api
Appium的触屏操作 TouchAction---Appium 2.0以上不在可以使用 官网地址:https://github.com/appium/appium/blob/master/docs/ ...
- 关于服务器上的XML
服务器上的 XML XML 文件是类似 HTML 文件的纯文本文件. XML 能够通过标准的 Web 服务器轻松地存储和生成. 在服务器上存储 XML 文件 XML 文件在 Internet 服务器上 ...