声明:

作者: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。

  1. 资源初始化、设置清理工作:setUp
  2. 主要需要进行覆写的方法,进行资源初始化:_setUp
  3. 会被测试框架自动调用,清理状态:clenaUp
  4. _setUp中需要调用的方法,添加tearDown执行后需执行的清理方法:addCleanup
  5. 重置Fixture、自动调用cleanUp、setUp:reset
  6. 在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的更多相关文章

  1. iOS 单元测试之XCTest详解(一)

    iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...

  2. 玩转单元测试之Testing Spring MVC Controllers

    玩转单元测试之 Testing Spring MVC Controllers 转载注明出处:http://www.cnblogs.com/wade-xu/p/4311657.html The Spri ...

  3. 玩转单元测试之WireMock -- Web服务模拟器

    玩转单元测试之WireMock -- Web服务模拟器 WireMock 是一个灵活的库用于 Web 服务测试,和其他测试工具不同的是,WireMock 创建一个实际的 HTTP服务器来运行你的 We ...

  4. 单元测试之NSNull 检测

    本文主要讲 单元测试之NSNull 检测,在现实开发中,我们最烦的往往就是服务端返回的数据中隐藏着NSNull的数据,一般我们的做法是通过[data isKindOfClass:[NSNull cla ...

  5. [转载]单元测试之道(使用NUnit)

    首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而又忐忑的心情点击界面上的 ...

  6. 单元测试之道(使用NUnit)

    首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而 又忐忑的心情点击界面上 ...

  7. 使用VisualStudio进行单元测试之二

    借着工作忙的借口,偷了两天懒,今天继续单元测试之旅.前面说了如何进行一个最简单的单元测试,这次呢就跟大家一起来熟悉一下,在visual studio中如何进行数据驱动的单元测试. 开始之前先来明确一下 ...

  8. 单元测试之Qunit

    单元测试之Qunit 前言 因为公司开发了一套javascript SDK需要测试,在网上找了很久,找到了JQuery团队开发的QUnit,和基于JUnit的JsUnit,还有一些还没有看,先讲讲QU ...

  9. Visual Studio 单元测试之二---顺序单元测试

    原文:Visual Studio 单元测试之二---顺序单元测试 此文是上一篇博文:Visual Studio 单元测试之一---普通单元测试的后续篇章.如果读者对Visual Studio的单元测试 ...

随机推荐

  1. 浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...

  2. OpenCV+TensorFlow实现自定义手写图像识别

    完整版请点击链接:https://mp.weixin.qq.com/s/5gHXGmLbtO7m3dOFrDUiHQ    或微信关注“大数据技术宅” 继用TensorFlow教你做手写字识别(准确率 ...

  3. 用bat批处理程序通过DOS命令行删除所有的空文件夹

    用过gothub或者码云的同学都知道,不包含任何文件的空文件夹上传提交时不被允许的.当然你可以在空文件下创建.keep文件(或.gitkeep文件),然后就可以上传了. 但是如果空文件夹比较多,并且我 ...

  4. 在虚拟机中搭建qduoj(一)——准备工作

    为缩减篇幅,已略去ubuntu镜像下载.虚拟机(VirtualBox.VMware)安装等操作,若有疑问请搜索相关教程. 1.虚拟机系统安装 本教程使用Ubuntu16.04 server版本(des ...

  5. [C#学习笔记3]关于Main(string[ ] args)中args命令行参数

    Main(string[] args)方法是C#程序的入口,程序从这里开始执行,在这里结束.C#代码逻辑要包含在一个类型(Type)中,游离的.全局的变量或函数是不存在的,这里的类型包括类(class ...

  6. maven pom 属性介绍

    maven pom属性 内置属性(预定义,可直接使用) ${basedir} 表示项目根目录,即包含pom.xml文件的目录; ${version} 表示项目版本; ${project.basedir ...

  7. DataPipeline CTO陈肃:从ETL到ELT,AI时代数据集成的问题与解决方案

    引言:2018年7月25日,DataPipeline CTO陈肃在第一期公开课上作了题为<从ETL到ELT,AI时代数据集成的问题与解决方案>的分享,本文根据陈肃分享内容整理而成. 大家好 ...

  8. scrapy安装失败:error:Microsoft Visual C++ 14.0 is reuired.及同类型安装问题解决办法

    今天在安装scrapy的时候(pip install Scrapy),出现了如下错误: building 'twisted.test.raiser' extensionerror: Microsoft ...

  9. F2 - Spanning Tree with One Fixed Degree - 并查集+DFS

    这道题还是非常有意思的,题意很简单,就是给定一个图,和图上的双向边,要求1号节点的度(连接边的条数)等于K,求这棵树的生成树. 我们首先要解决,如何让1号节点的度时为k的呢???而且求的是生成树,意思 ...

  10. 01-Django介绍和安装

    01-Django介绍和安装 1.Django介绍 1.1介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M(Model),视图V(View)和控 ...