pytest_前置后置
今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈
这次总结主要涉及到了以下几点:
1、unittest中的setUp、tearDown、setUpClass、tearDownClass
2、pytest中的前置后置如何表达
3、如何将前置后置和用例关联
4、pytest中的前置后置的级别如何区分
5、pytest中的前置后置“继承”关系,如何继承
简单总结下pytest的前置后置吧,pytest的前置后置非常简单,但是不同于unittest的前置后置,首先回顾下
1、unittest中的setUp、tearDown、setUpClass、tearDownClass
在unittest中的前置后置有明确的格式,看如下代码
import unittest
class MyTestCase(unittest.TestCase):
def setUp(self):
print("我是set_up")
def tearDown(self):
print("我是teardown")
def test_1(self):
print("我是测试用例1")
def test_ha(self):
print("我说测试用例2")
if __name__ == '__main__':
unittest.main()
可以得出结论,以下是运行结果:

unittest的前置必须是放在setUp里面,后置必须是放在tearDown里面,这个是有明确的格式的
当然了,setUp、tearDown是用例级别的,unittest还有类界别 的,请看如下代码
import unittest
class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("我是setupclass")
@classmethod
def tearDownClass(cls):
print("我是teardownclass")
def test_1(self):
print("我是测试用例1")
def test_ha(self):
print("我说测试用例2")
if __name__ == '__main__':
unittest.main()
结果如下:

可以看出setUpClass和tearDownClass都是在这个测试类只运行一次的
说了这么多,还是言归正传,说下pytest的前置后置
2、pytest中的前置后置如何表达
pytest的前置后置只用一个函数就可以解决
import pytest @pytest.fixture
def iniy():
print("我是前置")
yield
print("我是后置") @pytest.mark.usefixtures("iniy")
class TestCase: def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
pytest.main(["test.py"])
上面代码中的iniy函数就是一个前置后置,只需要加上一个装饰器(pytes.fixture)即可,
3、如何将用例与前置后置关联
设置了前置后置之后,用例如何引用?
@pytest.mark.usefixtures("init_driver")
def test_name_null_login(self, init_driver):
"""
用户名为空
"""
init_driver[1].login(test_login_datas.login_name_null_data["name"], test_login_datas.login_name_null_data["passwd"])
assert(init_driver[1].error() == test_login_datas.login_name_null_data["expect"])
上面代码中标记的部分就是引用前置后置的方式,置于为什么用例需要传递参数?
r
4、pytest中的前置后置的级别如何区分
查看源码可以看出这个fixture函数存在scope这个参数,这个参数是确定这个前置后置的级别,pytest中前置后置的界别分为函数级别、类级别、模块级别、会话级别,当然我们常用的还是类级别和函数级别
5、pytest中的前置后置“继承”关系,如何继承
pytest中的前置后置还可以共用,类似于类的“继承”,当然这个也是需要固定的用法
如果要实现公用的前置后置,那么需要将这个前置后置放到指定的文件中去------conftest.py
当然这个继承关系也是有要求的:低级别可以继承高级别,高级别不能继承低级别
举个栗子:函数级别的可以继承函数级别及更高的级别,但是类级别不能继承函数级别
# -*- coding:utf-8 -*-
"""
File Name: conftest
"""
import pytest @pytest.fixture(scope="class")
def ini():
print("我是类前置")
yield 2
print("我是类后置") @pytest.fixture
def init(ini):
pass
以上脚本可以看出init这个前置后置继承了ini这个类级别的前置后置,那么我们在下面脚本中直接调用这个init前置后置看看结果如何
import pytest @pytest.fixture()
def iniy():
print("我是前置")
yield
print("我是后置") @pytest.mark.usefixtures("init")
class TestCase: def test_1(self):
print("我是测试用例1") def test_ha(self):
print("我说测试用例2") if __name__ == '__main__':
pytest.main(["test.py"])

pytest_前置后置的更多相关文章
- spring 切面 前置后置通知 环绕通知demo
环绕通知: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...
- AOP 环绕通知 集成了前置 后置 返回通知等功能
AOP 环绕通知 集成了前置 后置 返回通知等功能
- Spring Bean前置后置处理器的使用
Spirng中BeanPostProcessor和InstantiationAwareBeanPostProcessorAdapter两个接口都可以实现对bean前置后置处理的效果,那这次先讲解一下B ...
- unittest的前置后置,pytest的fixture和共享机制conftest.py
Unittest setUp/tearDown setUp当中得到的变量,用self.xxx = value传递给测试用例 setUpClass/tearDownClass setupClass当中得 ...
- C: printf参数执行顺序与前置后置自增自减的影响
起源: 今天在了解副作用side-effect的过程中,看到了下面的网页,把我带到了由printf引起的一系列问题,纠结了一整天,勉强弄懂. 第一个代码没什么好解释的.而第二个printf(" ...
- Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理
1.概要 aop:面向方面编程.不改变源代码,还为类增加新的功能.(代理) 切面:实现的交叉功能. 通知:切面的实际实现(通知要做什么,怎么做). 连接点:应用程序执行过程期间,可以插入切面的地点. ...
- android实现前置后置摄像头相互切换
首先自定义一个继承自SurfaceView并且实现了SurfaceHolder.Callback接口的组件: public class CameraView extends SurfaceView i ...
- thinkphp5使用前置后置操作
下面举个例子,前置删除的例子 模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的 控制器中实例化类 $cate=model('cate'); $cate-> ...
- vue路由导航守卫及前置后置钩子函数参数详解
首先构建一个测试demo如下图: 接着来探讨路由配置界面 import Vue from 'vue' import Router from 'vue-router' // import HelloWo ...
随机推荐
- Node.js连接数据库取值,简单接口的实现
第一步:先安装Node.js,这里不做介绍 第二步:新建一个文件夹,打开cmd,进入该文件夹 执行npm init命令生成page.json文件 第三步:安装如下模块,打开cmd,进入第二步的文件夹, ...
- 药店商品销量分析(python)
一.数据分析的步骤 二.提出问题 分析药店商品销售情况 1)月均消费次数 2)月均消费金额 3)客单价 4)消费趋势 5)热销商品.滞销商品 三.理解数据 销售数据源为excel文件 字段的含义: 共 ...
- mysql数据库的创建问题
数据库客户端工具navicate 1.使用create database语句创建数据库 (1)指定字符集 create [database|schema ]if not exists 数据库名 def ...
- [技术]SYZOJ 实现网站与评测端分离
SYZOJ 实现分布式评测 这篇博客的起因是学校的OJ因为高考被切断了, 但是我的公网OJ是个实现很不清真的UOJ而且上面只有1core和1GB内存. 费了一些周折部署好syzoj之后大家喜闻乐见地被 ...
- mongodb创建管理员用户
db.createUser({user: "admin",pwd: "xxx",roles: ["root"]});
- python中count和index
str = [1,2,3,4,5] #定义一个列表 str = 3 #列表3 str [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] str.count(1 ...
- Debug 路漫漫-13:Python: pandas IndexError: single positional indexer is out-of-bounds
在数据预处理过程中,出现:IndexError: single positional indexer is out-of-bounds 原因是在使用 Pandas 读取 dataframe 的时候,分 ...
- 转 经典分类网络Googlenet
转自https://my.oschina.net/u/876354/blog/1637819 2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLe ...
- abstract,virtual,override
1.abstract 可以修饰类和方法,修饰方法时只声明不实现: 2.继承实现abstract类必须通过override实现abstract声明的方法,而virtual方法可选择override(重写 ...
- QT+OpenGL(03)--libpng库的编译
1.zlib库的下载 http://www.zlib.net/ zlib1211.zip 2.libpng库的下载 https://libpng.sourceforge.io/index.html l ...