这个周末基本上都在研究这玩意儿中度过了,虽然效率不高,英文文档看得晕头转向,但是好歹弄出来了 有个结果测试也通过了现在粗略总结一下有时间补上更多详细的例子。

首先使用py.test测试框架,可以做最简单的了解在它们官网上https://pytest.org/

flask现在有个很尴尬的地方,我在github上面clone的最新版的flask 0.11dev上面,关于example里面的flaskr easy_blog_application的测试已经转而使用py.test框架了,但是官网上的和仓库里的文档都还停留在使用自带库unittest框架测试。所以暂时处于一个没有文档参照的情况, 不过好消息是 有代码可以参照。

直接上代码

@pytest.fixture
def client(request):
app.config['TESTING'] = True
# 得到测试客户端
client = app.test_client() def teardown():
app.config['TESTING'] = False
# 执行回收函数
request.addfinalizer(teardown) return client

这里的decorator @pytest.fixture 是一个类似于unittest框架里面 setup()/teardown()一套的东西,他里面还有个参数scope 默认情况下scope是function也就是每个函数执行的时候都会执行被这个decorator包裹的函数 具体参照 http://pytest.org/latest/fixture.html#fixture 这个文档讲的非常清楚

然后这里就是申明一个fixture 叫client 这个client 会帮我打开对应需要测试的app.config['testing']=True 然后帮我得到测试客户端 也就是我的测试上下文。 然后返回这个测试上下文 最后将测试配置恢复原状。request.addfinalizer 在上面那个文档地址里面也有介绍到。大致做一个操作就是在操作函数执行结束之后 调用对应参数里面的函数进行收尾工作。

然后就是具体的test_case:

class TestOrder:
# 最外层请求头
_data = {
'api_key': api_key,
'version': '',
'time': str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
} def test_order_get_success(self, client):
url = '/order/get'
value = {
'tid': '20160104-165157704',
# 'tid': '12031823'
}
self._data['param'] = simplejson.dumps(value)
self._data['api_sign'] = make_sign(self._data)
rv = client.post(url, data=self._data)
assert simplejson.loads(rv.data)['success'] == True, '请求订单失败' # noqa

要特别注意 申明类也必须使用Test打头,不然py.test框架会找不到对应的测试对象,然后申明具体的test case 这里是test_order_get_success同理要使用test作为函数的开头,测试框架才能找到。然后这里传入测试客户端,也就是我们得到的测试上下文对象。 最后进行相应的操作就行了,然后调用断言操作对需要检查的项目进行检查。 返回的数据通通保存在 测试对象的.data里 也就是这里的rv.data。 这里只需要对rv.data里面返回值进行校验就可以达到单元测试的目的了。

流程大致就是这样。这样做的好处是,这样的测试可以放在项目对应的tests目录下,并且可以调用travis-ci这样的持续集成进行测试,无需手动测试。方便而且高效可靠。

关于flask 上直接使用py.test测试框架进行测试的更多相关文章

  1. 用 Python 测试框架简化测试

    用 Python 测试框架简化测试 摘要:本文将向您介绍了三种流行 Python 测试框架(zope.testing,py.test,nose)的基本特性,并讨论新一代的测试风格. 最近出现了行业级的 ...

  2. 使用强大的 Mockito 测试框架来测试你的代码

    原文链接 : Unit tests with Mockito - Tutorial 译文出自 : 掘金翻译计划 译者 : edvardhua 校对者: hackerkevin, futureshine ...

  3. Spring-Context之二:使用Spring提供的测试框架进行测试

    Spring框架是无侵入性的,所以你的代码可以完全是POJO(plain old java object),直接使用Junit就可以完成大部分的单元测试.但是在集成测试方面就比较吃力了.单元测试层面你 ...

  4. 白盒测试的学习之路----(四)搭建测试框架TestNG测试

    TestNG是一个开源自动化测试框架; TestNG是类似于JUnit,但它不是一个JUnit扩展.它的灵感来源于JUnit.它的目的是优于JUnit的,尤其是当测试集成的类. TestNG消除了大部 ...

  5. Android开源测试框架学习

    近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...

  6. C++测试利器--google test开源测试框架

    资料 偶然发现了google的测试框架gtest,马上试了下,效果挺不错,特别是对于写c++的人来说,方便很多.以前自己写c++的模块,通常是写好了模块后再另外定义些函数,然后在函数里面写测试用例来测 ...

  7. Spring MVC测试框架

    原文链接:http://jinnianshilongnian.iteye.com/blog/2004660 Spring MVC测试框架详解——服务端测试 博客分类: springmvc杂谈 spri ...

  8. Spring MVC测试框架详解——服务端测试

    随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用sp ...

  9. [转]Android开源测试框架学习

    近期因工作需要,分析了一些Android的测试框架,在这也分享下整理完的资料. Android测试大致分三大块: 代码层测试 用户操作模拟,功能测试 安装部署及稳定性测试 代码层测试 对于一般java ...

随机推荐

  1. 3386 二分图 洛谷luogu [模版]

    题目背景 二分图 感谢@一扶苏一 提供的hack数据 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两 ...

  2. patch函数的解释2

    patch 创建补片图形对象 句法: patch(X,Y,C) patch(X,Y,Z,C) patch(FV) patch(...'PropertyName',propertyvalue...) p ...

  3. linux中断源码分析 - 中断发生(三)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 回顾 上篇文章linux中断源码分析 - 初始化(二)已经描述了中断描述符表和中断描述符数组的初始化,由于在初始 ...

  4. 九,ESP8266 判断是断电上电(强制硬件复位)之后运行的内部程序还是内部软件复位之后运行的程序(基于Lua脚本语言)

    现在我有一个需求,WIFI模块控制一个继电器,我要做的是如果内部程序跑乱了,造成了内部程序复位重启,那么控制继电器的状态不能改变 如果是设备断电了,然后又来电了,我需要的是继电器一定要是断开才好.不能 ...

  5. SQL Server-聚焦深入理解死锁以及避免死锁建议(转载)

    前言 终于进入死锁系列,前面也提到过我一直对隔离级别和死锁以及如何避免死锁等问题模棱两可,所以才鼓起了重新学习SQL Server系列的勇气,本节我们来讲讲SQL Server中的死锁,看到许多文章都 ...

  6. kafka学习2:kafka集群安装与配置

    在前一篇:kafka学习1:kafka安装 中,我们安装了单机版的Kafka,而在实际应用中,不可能是单机版的应用,必定是以集群的方式出现.本篇介绍Kafka集群的安装过程: 一.准备工作 1.开通Z ...

  7. Linux Shell完成Qt程序的自动部署

    #!/bin/sh #取当前脚本的绝对路径 srcDir=$(cd ")";pwd) #设置库所在路径 libDir=${srcDir}"/J1900RunLib/*&q ...

  8. browserify运行原理分析

    目前对于前端工程师而言,如果只针对浏览器编写代码,那么很简单,只需要在页面的script脚本中引入所用js就可以了. 但是某些情况下,我们可能需要在服务端也跑一套类似的逻辑代码,考虑如下这些情景(以n ...

  9. 5分钟入门自动化测试——你应该学会的Postman用法(2)

    前言 之前的一篇文章<你应该学会的Postman用法>,主要介绍了postman的一些高级的用法,便于日常开发和调试使用,本文的基础是对postman的基本使用以及一些高级用法有一定的了解 ...

  10. 用PHP山寨一款软件

    什么是我国软件工程师引以为豪的能力?山寨.山寨,山寨! 我国程序员的山寨能力是世界一流的.这一点在世界范围内令人闻风丧胆.世界上根本就找不到一款我国工程师不能山寨的软件. 今天,锋哥教大家来山寨一款软 ...