mock 能做什么
 1.前后端联调,如果你是一个前端页面开发,现在需要开发一个功能:下一个订单,支付页面的接口,根据支付结果,支付成功,展示支付成功页,支付失败,展示支付失败页。要完成此功能,你需要调用后端的接口,根据返回给你的结果,来展示不同的页面。此时后端接口还没开发好,作为一个前端开发总不能等别人开发好了,你再开发,那你只有加班的命了。为了同步开发完成任务,此时,你可以根据接口文档的规定,把接口的地址和入参传过去,然后自己 mock 接口的不同返回界面,来完成前端的开发任务

 2.单元测试,单元测试的目的是测试某个小小单元的功能,但现实中开发的函数或方法都是有依赖关系的,比如 b 函数的参数,需要调用 a 函数返回结果,但是我前面已经测试 a 函数了。这种情况下,就不需要再测一次 a 函数了,此时就可以用 mock 模块来模拟调用这部分内容,并给出返回结果

 3.第三方接口依赖,在做接口自动化的时候,有时候需要调用第三方的接口,但是别人公司的接口服务不受你的控制,有可能别人提供的测试环境今天服务给你开着,别人就关掉了,给自动化接口测试带来很多的麻烦,此时就可以自己写一个 mock-server来模拟接口的返回数据。

1.如下场景:支付是一个独立的接口,由其它开发提供,根据支付的接口返回状态去显示失败,还是成功,这个是你需要实现的功能

也就是说你写一个 b 功能,你的同事写一个 a 功能,你的 b 功能需要根据 a 功能的结果去判断,然后实现对应的功能。这就是存在依赖关系,你同事开发的进度你是无法控制的你要是等他开发完了,你再开发,那你就坐等加班吧.

2.以下是自己写的 zhifu_statues()函数功能,大概设计如下,保存为temple.py 文件。

#保存为temple.py
#coding:utf-8 def zhifu():
'''假设这里是一个支付的功能,未开发完
支付成功返回:{"result": "success", "reason":"null"}
支付失败返回:{"result": "fail", "reason":"余额不足"}
reason 返回失败原因
'''
pass def zhifu_statues():
'''根据支付的结果 or 判断跳转到对应页面'''
result = zhifu()
print(result)
try:
if result["result"] == "success":
return "支付成功"
elif result["result"] == "fail":
print("失败原因:%s" % result["reason"])
return "支付失败"
else:
return "未知错误异常"
except:
return "Error,服务端返回异常"

以下为单元测试用例设计:

#保存为unittest_cases.py

# coding:utf-8
from unittest import mock
import unittest
import temple class Test_zhifu_statues(unittest.TestCase):
'''单元测试用例'''
def test_01(self):
'''测试支付成功场景'''
#mock一个支付成功数据
temple.zhifu = mock.Mock(return_value={"result": "success", "reason": "null"})
#根据支付结果测试页面跳转
statues = temple.zhifu_statues()
print(statues)
self.assertEqual(statues, "支付成功")
def test_02(self):
'''测试支付失败场景'''
#mock一个支付失败的数据
temple.zhifu = mock.Mock(return_value={"result": "fail", "reason": "余额不足"})
#根据支付结果测试页面跳转
statues = temple.zhifu_statues()
print(statues)
self.assertEqual(statues,'支付失败')
def test_03(self):
temple.zhifu = mock.Mock(return_value={"result": "1", "reason": "未知错误"})
statues = temple.zhifu_statues()
print(statues)
self.assertEqual(statues,'未知错误异常') if __name__=="__main__":
unittest.main()

运行效果截图:

最新文章

  1. Web前端上万字的知识总结
  2. 深入浅出React Native 1: 环境配置
  3. POJ3398Perfect Service[树形DP 树的最大独立集变形]
  4. Android抓包方法(一)之Fiddler代理
  5. 从POI到O2O 看百度地图如何走出未来之路
  6. perl 正则匹配代码
  7. postgreSQL9.1忘记postgres用户密码怎么办
  8. Windows程序消息机制浅析
  9. uva 10051
  10. 【转】AngularJS的$resource
  11. lua脚本中字符串分割split
  12. Happy 2006 poj2773
  13. Linux 学习记录 一(安装、基本文件操作).
  14. 业务配置开发平台qMISPlat 2.0 产品介绍
  15. Elasticsearch 5.0 —— Head插件部署指南(Head目前支持5.0了!请不要看本篇文章了)
  16. 2018 完美搭建VS Code 的JAVA开发环境并解决print乱码问题
  17. 【RS】Collaborative Memory Network for Recommendation Systems - 基于协同记忆网络的推荐系统
  18. Linux 运行进程实时监控pidstat命令详解
  19. java学习笔记30(IO :缓冲流)
  20. Java进阶之路

热门文章

  1. iOS核心动画高级技巧-2
  2. iOS UIView x Android View
  3. 20191010-4 alpha week 1/2 Scrum立会报告+燃尽图 02
  4. 教你用Java web实现多条件过滤功能
  5. 【Luogu P3376】网络最大流
  6. 如何在SQL Server 2008下轻松调试T-SQL语句和存储过程
  7. 微信浏览器跳转浏览器下载app解决方案
  8. 简单聊一聊spring cloud stream和kafka的那点事
  9. 【Android - 进阶】之Dialog分类及使用
  10. react中简单倒计时跳转