unittest的前置后置,pytest的fixture和共享机制conftest.py
Unittest
setUp/tearDown
setUp当中得到的变量,用self.xxx = value传递给测试用例
setUpClass/tearDownClass
setupClass当中得到的变量,用cls.xxx = value传递给测试用例
pytest
pytest有两种前置后置,一种是沿用unittest风格setup/teardown, setup_class/teardown_class
另一种测试fixture
定义fixture
@pytest.fixture #定义fixture必须用这个装饰器
def fix():
print(“前置代码”)
yield # yield为前置后置的分割线
print(“后置代码”)
fixture有4个作用域。
测试函数(function)、测试类(class)、测试模块文件(module)、测试会话(session)
@pytest.fixture(scope="function"(默认值)/"class"/"module"/"session")
def xxxx():
pass
设置fixture的返回值
@pytest.fixture
def init():
print("测试函数的前置")
yield "test","abc" #fixture的返回值放在yield旁
print("测试函数的后置")
调用fixture返回值
@pytest.mark.usefixtures("init") #调用函数名为init的fixture
def test_bbb(init): #把函数名为init的fixture的返回值作为参数传入这个测试函数里
print(init)

如果fixture有返回值,那么,将它作为测试函数的参数时,可以不用装饰器,如下图

fixture的共享机制conftest.py
1.放的都是fixture
2.文件名不能更改。不同包下,可以创建多个
3.对外共享
4.共享范围:
同级共享
向下共享
5.优先级:就近原则。如调用fixture后如何知道定义在哪个文件,查找路线:自己模块 > 同级 > 往上
都找不到,报错
共享是定义好fixture后,被测试函数调用
就近原则,是测试用例调用的fixture,向上查找放在哪个conftest文件里
6.嵌套
如下代码,init2里嵌套这init的代码
@pytest.fixture
def init():
print("* init before *")
yield "i am init"
print("* init after *")
@pytest.fixture
def init2(init): # 继承init的前置后置,再它的基础上增加一些内容
print("* init2 before *")
yield init # 继承init的返回值
print("* init2 after *")
测试函数调用init2
@pytest.mark.usefixtures("init2")
def test_data1():
assert True
运行结果:先运行init前置,再运行init2的前置,接着运行init2的后置,最后运行init的后置
什么时候嵌套? 一个fixture想完全使用另一个fixture,并在人家的基础上新增一些代码
当测试过程需要连接DB时,可以在conftest.py定义好如下代码,在需要用的测试函数调用这个fixture就好。
这个fixture定义scope为session,是一旦运行main模块,就立即启动db,运行完后则关闭db,autouse是自动使用这个fixture的开关,module、class、function的不建议开启autouse
@pytest.fixture(scope="session",autouse=True)
def db_fixture():
db = HandleDB() # 实例化DB
yield db
db.close() # 关闭连接
unittest的前置后置,pytest的fixture和共享机制conftest.py的更多相关文章
- pytest_前置后置
今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈 这次总结主要涉及到了以下几点: 1.unittest中的setUp.tearDown.setUpClass.t ...
- spring 切面 前置后置通知 环绕通知demo
环绕通知: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...
- AOP 环绕通知 集成了前置 后置 返回通知等功能
AOP 环绕通知 集成了前置 后置 返回通知等功能
- Spring Bean前置后置处理器的使用
Spirng中BeanPostProcessor和InstantiationAwareBeanPostProcessorAdapter两个接口都可以实现对bean前置后置处理的效果,那这次先讲解一下B ...
- 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 ...
随机推荐
- 熟知Mysql基本操作
本文是学习 Mysql必知必会 后的笔记 学习之前需要创建一个数据库,然后导入下面两个mysql脚本 create database db1 charset utf8; ############### ...
- 不推荐别的了,IDEA 自带的数据库工具就很牛逼!
MySQL 等数据库客户端软件市面上非常多了,别的栈长就不介绍了, 其实 IntelliJ IDEA 自带的数据库工具就很牛逼,不信你继续往下看. 本文以 IntelliJ IDEA/ Mac 版本作 ...
- php和mysql数据库防SQL注入的有效解决办法
<?php$mysqli = new mysqli("localhost", "my_user", "my_password", &q ...
- 【转】如何用MTR诊断网络问题
MTR 是一个强大的网络诊断工具,管理员能够用它诊断和隔离网络错误,并向上游提供商提供有关网络状态的有用报告.MTR 通过更大的采样来跟踪路由,就像 traceroute + ping 命令的组合.本 ...
- C++处理char*,char[],string三种类型间的转换
前言 在C和C++中,有一个相当重要的部分,就是字符串的编程描述.在学C的时候,很多人习惯了char[],char*表示法,直到遇见了C++后,出现了第三者:string.这时候,很多初学者就会在这三 ...
- hdu4990 矩阵快速幂
题意: 给你一短代码,让你优化这个代码,代码如下 #pragma comment(linker, "/STACK:1024000000,1024000000") #in ...
- Windows PE 第十三章 PE补丁技术
PE补丁技术 这章很多东西之前都见过,也单独总结过,比如动态补丁里说的远程代码注入,还有hijack什么的.之前整理过的这里就不细说了,大体说下思路.这里总结一些之前没总结过的东西. 资料中把补丁分为 ...
- VMware-viclient-all
VMware-viclient-all https://my.vmware.com/web/vmware/details?productId=491&downloadGroup=ESXI60U ...
- Java中浮点数的坑
基本数据类型 浮点数存在误差 浮点数有一个需要特别注意的点就是浮点数是有误差的,比如以下这段代码你觉得输出的什么结果: public class Demo { public static void m ...
- [刷题] 350 Intersection of Two Arrays
要求 给定两个数组nums,求两个数组交集 输出结果与元素在两个数组中出现的次数一致 不考虑输出结果的顺序 举例 nums1=[1,2,2,1] nums2=[2,2] 结果:[2,2] 思路 使用m ...