Python mock

在测试过程中,为了更好地展开单元测试,mock一些数据跟对象在所难免,下面讲一下python的mock的简单用法。

关于python mock,网上有很多资料,这里不会讲的特别深,但一定会是实用为主,看完后,至少可以让你知道mock是怎样用的。

1.mock对象方法中的返回数据:

我们经常会需要这样的场景,a系统跟b系统联调,b系统开发人员进度较慢,有些a需要调用b系统api的返回数据没办法拿到,这时候,不改变原来的代码,但联调需要保证a系统这边功能完全ok

的场景就可以用到mock这个模块了。

在这里,我们假设b系统完成时是以下这个样子

system_b.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import requestsdef send_request(url):r = requests.get(url)return json.loads(r.text)def visit_ustack():return send_request('http://api.kanzhihu.com/getposts')if __name__ == '__main__':content = visit_ustack()print content

我们通过调用visit_ustack()这个入口,可以得到http://api.kanzhihu.com/getposts这个接口返回的json数据。理想测试情况下,a系统这边的测试代码是这样的

system_a.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-import system_bdef system_b_test():if system_b.visit_ustack()['count'] == 10:print "system b正常,测试通过"else:print "system b异常,测试失败"system_b_test()

结果显而易见是这样的

/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python /Users/lsf/PycharmProjects/py_pattern/test.py
system b正常,测试通过Process finished with exit code 0

但现在糟糕的是,系统 b的主体函数send_request还没开发,我们没办法获取json格式的数据,当然,现实中可以通过很多其他的办法来解决,但为了最大程度仿真b系统,现在可以通过mock来完成这项工作。

现实中功能未完成的a系统

system_a.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-def send_request(url):passdef visit_ustack():return send_request('http://api.kanzhihu.com/getposts')if __name__ == '__main__':content = visit_ustack()print content

system_b.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-import mock
import system_bdef system_b_test():
    mock_result = {u'count': 1000, u'publishtime': u'1470798000', u'date': u'2016-08-10', u'id': u'2375'}], u'error': u''}system_b.send_request = mock.Mock(return_value=mock_result)if system_b.visit_ustack()['count'] == 1000:print "system b正常,测试通过"else:print "system b异常,测试失败"system_b_test()

结果是

/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python /Applications/PyCharm.app/Contents/helpers/pycharm/utrunner.py /Users/lsf/PycharmProjects/py_pattern/test.py true
Testing started at 15:24 ...
system b正常,测试通过Process finished with exit code 0
Empty test suite.

在这里,我们通过直接mock一个json数据,来达到b系统返回数据的目的,甚至我们调用的依然是b系统的接口,区别已用红色字体标出,这个就是mock的操作了。

(1)mock_result:准备需要的mock数据

(2)用mock.Mock(return_value=mock_result)将mock对象设置给系统b对应的返回方法中

值得注意的是,mock.Mock(return_value=mock_result)是一个对象,但为什么system_b.send_request = mock.Mock(return_value=mock_result)返回的是数据而不是对象的其他属性跟方法呢,在这里,是因为mock对象中有一个side_effect属性,如果这个属性为None,就会将return_value设置的值返回。

2.mock对象中的方法:mock.patch跟mock.patch.object

#!/usr/bin/env python
# -*- coding: utf-8 -*-import mockclass By(object):def add(self, a, b):return a + b + self.multiply(a,b)def multiply(self, a, b):passb  = By()class MockDemo(object):def __init__(self):self.b  = b@mock.patch.object(b,'multiply')def test_add(self,mock_multiply):a = 3b = 5mock_multiply.return_value = 15if self.b.add(a,b) == 23:print "mock成功"else:print "mock失败"if __name__ == '__main__':MockDemo().test_add()

如果mock的是一个函数,则可以用@mock.patch(target='module.func')来实现。

转载于:https://www.cnblogs.com/wang1122/p/8312698.html

python mock接口返回数据(转载)相关推荐

  1. python 美团api接口对接_python实现比对美团接口返回数据和本地mongo数据是否一致示例...

    本文实例讲述了python实现比对美团接口返回数据和本地mongo数据是否一致.分享给大家供大家参考,具体如下: 应用背景:美团平台商品的上下架状态.库存.售价,和mongo库存储的是否一致. too ...

  2. 接口返回html转换josn,接口返回数据Json格式处理

    有这样一个页面 , 用来显示用户的账户记录数据,并且需要显示每个月的 收入 支出合计 ,在分页的时候涉及到一些问题,需要对返回的Json格式做处理,处理起来比较麻烦,后端返回的Json数据格式形式如下 ...

  3. php app接口id参数类型过滤,PHP开发APP接口---返回数据的封装类

    /** * app返回数据类 * 1.接受多维,缺少键名的数组, * 2.可由输入的format参数决定返回数据格式 * 例子:Response::show(200, 'success', $data ...

  4. 高德逆地理编码接口返回数据格式不统一以及百度逆地理编码接口返回数据解析失败的踩坑记录

    最近有个需求是定位后根据定位的经纬度获取当前地址的详细信息,例如获取街道名称,街道号,乡镇街道编码,区域编码等信息. 于是乎找到了高德的逆地理编码接口,看了看正好符合我的需求.然而使用起来并不顺利! ...

  5. springboot 接口返回数据时 net.sf.json.JSONNull[“empty“]) 异常

    springboot 接口返回数据时 net.sf.json.JSONNull["empty"]) 异常 参考文章: (1)springboot 接口返回数据时 net.sf.js ...

  6. 酷友观点/经验:支付接口返回数据接收地址,session数据丢失(或者说失效)的问题浅析(原创文章)...

    酷友观点/经验:支付接口返回数据接收地址,session数据丢失(或者说失效)的问题浅析(原创文章) 最近手头在开发一个游戏官网,在支付模块采用神州付技术支持,神州付数据表单中要求提供服务器返回地址和 ...

  7. F12 界面:请求响应内容 Preview 和 Response 不一致、接口返回数据和 jsp 解析到的内容不一致

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 情况描述: 我有一个接口只是简单的查询列表数据并返回给前端作一个表格展示. 接口返回的 use ...

  8. 文本过滤后返回空值_利用Fiddler来Mock接口返回值

    前篇文章介绍了Mock测试的相关理论知识,今天就通过实战操作来演示一下如何通过Fiddler抓包工具来Mock接口返回值. 准备工作 准备一个服务端接口,可以自己用SpringBoot写一个简单的Re ...

  9. php验证返回值,php接口返回数据 用echo 还是return?

    php接口返回数据 用echo 还是return? 作者:PHPYuan 时间:2018-06-10 23:40:39 框架用多了,也是有坏处的,之前一直用框架写接口,返回数据时都是用的return ...

  10. Charles 修改接口返回数据

    前言    测试中,我们经常会遇到一些边界值数据很难造出来,首先能想到的是能否可以模拟这些场景,以覆盖case,这时经常需要修改接口请求或者返回数据.在我之前的文章有介绍如何通过打断点的方式进行修改, ...

最新文章

  1. 文件共享服务器多少内存,共享服务器需要多少内存
  2. BizTalk开发系列(九) MAP的连接方法
  3. bind merge r 和join_R语言并行读取csv:地表最快csv合并方法
  4. 数学系鄙视物理系的经典桥段,全部看懂了算我输!
  5. 面向多星多任务的大数据处理系统设计
  6. 三星Galaxy Note 10再曝正面渲染图:居中前置摄像头更顺眼
  7. layui弹窗自适应变大_layui弹窗宽度固定高度自适应界面
  8. android编译 预装apk,Android系统使用Shell脚本预装apk
  9. 根据时间戳生成编号_使用雪花算法生成流水号!
  10. HDU_2082 找单词 (生成函数)
  11. 服务器自带raid功能吗,服务器的 RAID 功能介绍
  12. 视频教程-人工智能-必备数学基础视频教程-机器学习
  13. 互联网晚报 | 12月7日 星期二 | 阿里新设两大数字商业板块;B站宣布迈入8K超高清时代;中国物流集团正式成立...
  14. 十款微信小程序源码分享
  15. 最好用的论文数据搜索网站,搜索容易让写论文变轻松!
  16. Curious Cupid
  17. 几款好用的报表制作软件!!!
  18. 如何将CVAT的docker镜像上传到华为云镜像中心SWR
  19. UIP协议栈笔记·一
  20. 180209 逆向-Frida-python on win多进程BUG(曲线救国)

热门文章

  1. dpkg-buildpackage: error: debian/rules binary subprocess was killed by signal 2
  2. CPU又烧了,说起来汝可能不信
  3. 如何证明永动机不可能制造出来
  4. 管理感悟:正确认识自己的工作
  5. 解决安卓的permission denied for this window type问题
  6. VS C++ 字符大写变换 字符小写变换 tolower toupper
  7. C# string转char数组 string转char[]
  8. inmotion服务器账号密码,InMotionHosting如何通过SSH连接服务器
  9. 软件开发计划_敏捷软件开发实践:估算与计划读书笔记125第23章 案例分析:Bomb Shelter Studio...
  10. react项目案例_教程28——使用 react-rewired 配置基本的环境(项目)