mock demo 目录结构
用到的库:
unittest:单测框架
mock:从python3.3以后,mock已经集成到unittest
断言知识点:
断言结果:如果成功返回None,如果失败,返回失败信息
依赖的外部支付接口
__author__ = 'kangpc'
__date__ = '2020-6-29 10:46'
"""
mock demo
"""
def pay_money():
'''假设这里是一个支付的功能,未开发完
支付成功返回:{"result": "success", "reason":"null"}
支付失败返回:{"result": "fail", "reason":"余额不足"}
reason返回失败原因
'''
pass
def pay_status():
'''根据支付的结果success or fail,判断跳转到对应页面'''
result = pay_money()
print("打印mock数据:"+str(result))
try:
if result["result"] == "success":
return "支付成功"
elif result["result"] == "fail":
print("失败原因:%s" % result["reason"])
return "支付失败"
else:
return "未知错误异常"
except:
return "Error, 服务端返回异常!"
测试类-测试pay文件中mock的支付接口
__author__ = 'kangpc'
__date__ = '2020-6-29 10:47'
import unittest
from unittest import mock
import pay
class Test_pay_statues(unittest.TestCase):
'''单测用例'''
def test_01(self):
print('''执行用例名称:支付成功场景''')
# mock一个支付成功的数据
pay.pay_money = mock.Mock(return_value={"result": "success", "reason":"null"})
# 根据支付结果测试页面跳转
status = pay.pay_status()
self.assertEqual(status, "支付成功")
def test_02(self):
print('''执行用例名称:支付失败场景''')
# mock一个支付成功的数据
pay.pay_money = mock.Mock(return_value={"result": "fail", "reason": "余额不足"})
# 根据支付结果测试页面跳转
status = pay.pay_status()
self.assertEqual(status, "支付失败")
if __name__ == "__main__":
unittest.main()
运行结果
C:\Users\54718\Envs\MyDjango\Scripts\python.exe D:/myproject/mock_demo/test_pay.py
执行用例名称:支付成功场景
打印mock数据:{'result': 'success', 'reason': 'null'}
执行用例名称:支付失败场景
..
打印mock数据:{'result': 'fail', 'reason': '余额不足'}
----------------------------------------------------------------------
失败原因:余额不足
Ran 2 tests in 0.000s
OK
Process finished with exit code 0