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的更多相关文章

  1. pytest_前置后置

    今天总结下pytest,pytest简直就是python自动化中的高富帅,各种操作,哈哈 这次总结主要涉及到了以下几点: 1.unittest中的setUp.tearDown.setUpClass.t ...

  2. spring 切面 前置后置通知 环绕通知demo

    环绕通知: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

  3. AOP 环绕通知 集成了前置 后置 返回通知等功能

    AOP 环绕通知 集成了前置 后置 返回通知等功能

  4. Spring Bean前置后置处理器的使用

    Spirng中BeanPostProcessor和InstantiationAwareBeanPostProcessorAdapter两个接口都可以实现对bean前置后置处理的效果,那这次先讲解一下B ...

  5. C: printf参数执行顺序与前置后置自增自减的影响

    起源: 今天在了解副作用side-effect的过程中,看到了下面的网页,把我带到了由printf引起的一系列问题,纠结了一整天,勉强弄懂. 第一个代码没什么好解释的.而第二个printf(" ...

  6. Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理

    1.概要 aop:面向方面编程.不改变源代码,还为类增加新的功能.(代理) 切面:实现的交叉功能. 通知:切面的实际实现(通知要做什么,怎么做). 连接点:应用程序执行过程期间,可以插入切面的地点. ...

  7. android实现前置后置摄像头相互切换

    首先自定义一个继承自SurfaceView并且实现了SurfaceHolder.Callback接口的组件: public class CameraView extends SurfaceView i ...

  8. thinkphp5使用前置后置操作

    下面举个例子,前置删除的例子   模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的   控制器中实例化类   $cate=model('cate'); $cate-> ...

  9. vue路由导航守卫及前置后置钩子函数参数详解

    首先构建一个测试demo如下图: 接着来探讨路由配置界面 import Vue from 'vue' import Router from 'vue-router' // import HelloWo ...

随机推荐

  1. math random模块

    math --- 数学函数 该模块提供了对C标准定义的数学函数的访问,返回值除非有明确说明,否则所有返回值均为浮点数 math.ceil(x) 返回 x 的上限,即大于或者等于 x 的最小整数. 如果 ...

  2. 基于golang分布式爬虫系统的架构体系v1.0

    基于golang分布式爬虫系统的架构体系v1.0 一.什么是分布式系统 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统.简单来说就是一群独立计算机 ...

  3. 1443. Minimum Time to Collect All Apples in a Tree

    Given an undirected tree consisting of n vertices numbered from 0 to n-1, which has some apples in t ...

  4. 1113 Integer Set Partition

    Given a set of N (>) positive integers, you are supposed to partition them into two disjoint sets ...

  5. 【ElasticSearch】ElasticSearch集群扫盲

    Cluster 集群 ⼀个 Elasticsearch 集群由⼀个或多个节点(Node)组成,每个集群都有⼀个共同的集群名称作为标识.   Node节点 ⼀个 Elasticsearch 实例即⼀个 ...

  6. 从苏宁电器到卡巴斯基第16篇:我在苏宁电器当营业员 VIII

    其实不想走,其实很想留 我在之前的故事中说过,在大四的时候,我其实是想考研的,但是看了一段时间的书以后,发现自己实在不是那块料,主要是数学实在是学不明白,那么也就只能作罢了.而后来面试中石化的时候,尽 ...

  7. Ubuntu Linux DNS服务器 BIND9配置文件命令介绍

    BIND9配置方法 转载▼     配置语法 named.conf acl 定义访问控制列表 controls 定义rndc命令使用的控制通道,若省略,则只允许经过rndc.key认证的127.0.0 ...

  8. 深入浅出带你玩转sqlilabs(四)-updatexml(),floor(),extractvalue()报错注入

    SQL各种参数类型下的注入测试 数字型-sqlilabs less2 前面文章已演示过 字符型-sqlilabs less1 前面文章已演示过 搜索型-自写测试 如: www.test.com/ind ...

  9. 【hugo】- hugo 监听浏览器切换title

    hugo 博客 监听浏览器title 动态改变浏览器title标题 找到head.html themes/maupassant/layouts/partials/head.html 添加监听js 可以 ...

  10. JSON数据显示在jsp页面上中文乱码的解决办法

    在@RequestMapping属性添加属性produces = "text/html;charset=utf-8",设置字符集为utf-8即可 代码如下: @RequestMap ...