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 ...
随机推荐
- Maven 跳过Junit单元测试
转载自:https://blog.csdn.net/arkblue/article/details/50974957 -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至 ...
- bootstrap如何去除自带的样式----导航栏中的菜单实现平滑的过渡到对应的菜单区域-------动态跟换模态框中的内容
问题1:如何去除bootstap中css中自带的overflow:hidden这个样式 今天遇见在bootstap中轮播图上的 附带图 片不能够显示出来,图片始终有一部分的高度 被隐藏了 后来通 ...
- Html学习之十五(盒模型)
Web页面中的每一个元素都是一个盒模型,CSS中使用盒模型来描述一个元素.CSS盒子模型又称框模型,它包含四个边界,分别是外边距边界(Margin).边框边界(border).内边距边界(paddin ...
- 201871010132-张潇潇-《面向对象程序设计(java)》第八周总结
201871010132-张潇潇<面向对象程序设计(java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...
- LG4556 [Vani有约会]雨天的尾巴 动态开点线段树+线段树合并
问题描述 LG4556 题解 对于每一个结点,建立一棵动态开点线段树. 然后自低向上合并线段树. 同时维护整个值域的最大值和最大值位置. \(\mathrm{Code}\) #include<b ...
- 舒服的MarkDown软件Mark Text
- Vue 学习记录(一)-创建项目
环境准备 node.js vue-cli 安装配置环境 1.下载node.js,使用默认配置安装 . 2.使用npm命令安装国内下载镜像(可选) cmd: npm install -g cnpm ...
- 大话设计模式Python实现-适配器模式
适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口. 下面是一个适配器模式的demo: #!/usr/bin/env python # -*- coding:u ...
- 更改hosts文件解决 Git无法连接到github
问题描述 inmeditation@sunlizhao MINGW64 ~/Desktop/hexob(1) $ ssh -T git@github.com ssh: connect to host ...
- windows10 启动安卓模拟器会蓝屏的解决方案
最近突然想用win10装个安卓模拟器玩游戏,然后提示vt被占用. 查了一下,了解到在windows 10 系统上,我们会用vmware,virtual box ,hyper-v,安卓模拟器,360安全 ...