单元测试之Fixture
声明:
作者:zhaojun 创建日期:2017-08-04 更新日期:2017-08-07
一、什么是Fixture,Fixture有什么作用,为什么需要使用Fixture
# 下载
pip install fixtures
Fixture就是打桩,就好比testunit中的setUp、tearDown,起到在测试用例执行前做一些准备和测试用例执行后做一些清理工作。那既然测试用例已经有了setUp、tearDown,为什么还需要Fixture呢?
- 1、不同测试用例需要的资源不同,都在setUp中统一写不合理,有些资源准备耗时长会整体拉长测试用例执行时间,Fixture可以为每个测试用例个性化定制所需要的资源和清理工作;
- 2、将准备工作、清理工作抽象出来可以实现代码复用;
- 3、使用Fixture更灵活,需要的时候才使用。
Fixture表示一些状态或者资源,经常用在测试中,一个Fixture使用前必须调用setUp进行资源初始化,测试用例测试完后调用cleanUp进行资源清理(因为很多Fixture有一些比如临时目录等资源),调用reset方法可以起到调用cleanUp、setUp方法相同的效果并且可能会更快。
二、怎么开发自己的Fixture
在python的fixtures模块中有一个Fixture接口类,自定义Fixture需继承该类,并推荐覆写其中的_setup方法,覆盖setUp方法目前也支持。该类有几个核心方法:setUp、_setUp、addCleanup、reset、useFixture。
- 资源初始化、设置清理工作:setUp
- 主要需要进行覆写的方法,进行资源初始化:_setUp
- 会被测试框架自动调用,清理状态:clenaUp
- _setUp中需要调用的方法,添加tearDown执行后需执行的清理方法:addCleanup
- 重置Fixture、自动调用cleanUp、setUp:reset
- 在Fixture中使用其他Fixture:useFixture
三、别人是怎么开发Fixture的
在python的fixtures模块中有很多现有可以直接使用的fixture,选其中几个进行分析。
1、TempDir:创建临时目录
from fixtures import TempDir
在_setUp中创建临时目录,并调用addCleanup在测试用例测试完后删除临时目录。

2、Timeout:指定时间后发送闹钟信号
from fixtures import Timeout
在_setup中设置信号并调用addCleanup测试用例结束后设置回原先状态。

3、Database:指定时间后发送闹钟信号
在setUp中创建库表,并调用addCleanup设置测试用例执行完后卸载库表
四、怎么使用Fixture
pip install WebTest
testtools.TestCase中封装了useFixture方法,用于启动Fixture,注册Fixture清理方法
from testtools import TestCase
import webtest class AlarmTests(TestCase):
def setUp(self):
super(AlarmTests, self).setUp() self.useFixture(database.Database())
self.load_backends() self.public_app = webtest.TestApp(self.loadapp('cloundmanager'))
self.allCleanup(delattr, self, 'public_app')

五、怎么开发url请求测试用例
- Test Case需要派生于 testtools.TestCase 类
- 如果需要自定义Fixtures, 需要派生于 fixtures.Fixture类, 并覆写父类的setUp/cleanUp方法
import fixtures
import testtools class MyFixture(fixtures.Fixture): # 定义fixtrues
def setUp(self):
super(MyFixture,self).setUp()
self.frobnozzle = 42 def cleanUp(self):
super(MyFixture,self).cleanUp() class MyTestCase(testtools.TestCase): # 在单元测试中使用useFixture去调用上面定义的fixtrue def setUp(self):
super(MyTestCase, self).setUp()
self.my_fixture = self.useFixture(MyFixture()) def test_case_1(self):
self.assertEqual(42, self.my_fixture.frobnozzle)
self.addCleanup(delattr, self, 'my_fixture') # 调用cleanUp进行清理工作
六、官方文档
https://pypi.org/project/fixtures/
单元测试之Fixture的更多相关文章
- iOS 单元测试之XCTest详解(一)
iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...
- 玩转单元测试之Testing Spring MVC Controllers
玩转单元测试之 Testing Spring MVC Controllers 转载注明出处:http://www.cnblogs.com/wade-xu/p/4311657.html The Spri ...
- 玩转单元测试之WireMock -- Web服务模拟器
玩转单元测试之WireMock -- Web服务模拟器 WireMock 是一个灵活的库用于 Web 服务测试,和其他测试工具不同的是,WireMock 创建一个实际的 HTTP服务器来运行你的 We ...
- 单元测试之NSNull 检测
本文主要讲 单元测试之NSNull 检测,在现实开发中,我们最烦的往往就是服务端返回的数据中隐藏着NSNull的数据,一般我们的做法是通过[data isKindOfClass:[NSNull cla ...
- [转载]单元测试之道(使用NUnit)
首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而又忐忑的心情点击界面上的 ...
- 单元测试之道(使用NUnit)
首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而 又忐忑的心情点击界面上 ...
- 使用VisualStudio进行单元测试之二
借着工作忙的借口,偷了两天懒,今天继续单元测试之旅.前面说了如何进行一个最简单的单元测试,这次呢就跟大家一起来熟悉一下,在visual studio中如何进行数据驱动的单元测试. 开始之前先来明确一下 ...
- 单元测试之Qunit
单元测试之Qunit 前言 因为公司开发了一套javascript SDK需要测试,在网上找了很久,找到了JQuery团队开发的QUnit,和基于JUnit的JsUnit,还有一些还没有看,先讲讲QU ...
- Visual Studio 单元测试之二---顺序单元测试
原文:Visual Studio 单元测试之二---顺序单元测试 此文是上一篇博文:Visual Studio 单元测试之一---普通单元测试的后续篇章.如果读者对Visual Studio的单元测试 ...
随机推荐
- C#语法——反射,架构师的入门基础。
前言 编程其实就是写代码,而写代码目的就是实现业务,所以,语法和框架也是为了实现业务而存在的.因此,不管多么高大上的目标,实质上都是业务. 所以,我认为不要把写代码上升到科学的高度.上升到艺术就可以了 ...
- CSS超出省略号样式
overflow:hidden;text-overflow:ellipsis;-wekit-line-clamp:3;display:-webkit-box;-webkit-box-orient:ve ...
- IOC之Unity的使用详解
原文链接:https://www.cnblogs.com/hua66/p/9670639.html Unity作为Microsoft推出IOC容器,其功能是非常丰富的,其中需要注意的地方也不少.以下是 ...
- 包、继承以及 LeetCode 27、28题
1 package.import 和 import static 1.1 Package Java 引入了包(Package)机制,提供了类的多层命名空间,用于解决类的命名冲突.类文件管理问题.Jav ...
- OO_BLOG2_多线程电梯模拟
作业2-1 单部多线程傻瓜调度(FAFS)电梯的模拟 I. 基于度量的程序结构分析 1)程序结构与基本度量统计图 2)分析 这次作业基本奠定了本人三次电梯作业的基本架构,简述如下: Elevato ...
- Python全栈开发之---迭代器、可迭代对象、生成器
1.什么叫迭代 现在,我们已经获得了一个新线索,有一个叫做“可迭代的”概念. 首先,我们从报错来分析,好像之所以1234不可以for循环,是因为它不可迭代.那么如果“可迭代”,就应该可以被for循环了 ...
- Retrofit2.0 设置 连接超时
Retrofit2.0 这个网络请求框架使用了很久了,最近一次出现一个小插曲. 有一个接口,返回的数据量因为业务的原因 会返回很大的数据量,此时网络不大好的情况下,会出现请求失败的情况 也就是回调了 ...
- typescript的数据类型
typescript是JavaScript的扩展,说到js的数据类型,大家肯定会想到它是一种弱类型的语言,不需要指定特定的数据类型,ts的语言也正在往java这些强类型的语言靠近: 看看typescr ...
- simulink创建简单模型
创建简单模型 您可以使用 Simulink® 对系统建模,然后仿真该系统的动态行为.Simulink 允许您创建模块图,图中的各个连接模块代表系统的各个部分,信号代表这些模块之间的输入/输出关系.Si ...
- 第五篇Scrum冲刺博客
一.Daily Scrum Meeting照片 二.每个人的工作 成员 ItemID 已完成工作 明天计划完成的工作 遇到的困难 张鸿 o1 整合界面至游戏中 将其他剩余功能进行整合 游戏状态的切换 ...