python mock知识03

参考文章:html

版权声明 前端


出处: 博客园Linux超的技术博客--https://www.cnblogs.com/linuxchao/python

您的支持是对博主最大的鼓励,感谢您的认真阅读linux

本文版权归做者全部,欢迎转载,但未经做者赞成必须保留此段声明, 且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。后端

做者: Linux超服务器

mock做用

1. 解决依赖问题:当咱们测试一个接口或者功能模块的时候,若是这个接口或者功能模块依赖其余接口或其余模块,那么若是所依赖的接口或功能模块未开发完毕,那么咱们就能够post

使用mock模拟被依赖接口,完成目标接口的测试单元测试

2. 单元测试:若是某个功能未开发完成,咱们又要进行测试用例的代码编写,咱们也能够先模拟这个功能进行测试测试

3. 模拟复杂业务的接口:实际工做中若是咱们在测试一个接口功能时,若是这个接口依赖一个很是复杂的接口业务,那么咱们彻底可使用mock来模拟这个复杂的业务接口,其实url

这个和解决接口依赖是同样的原理

4.先后端联调:若是你是一个前端页面开发,如今须要开发一个功能:根据后台返回的状态展现不一样的页面,那么你就须要调用后台的接口,可是后台接口还未开发完成,是否是你

就中止这部分工做呢?答案是否认的,你彻底能够借助mock来模拟后台这个接口返回你想要的数据

 

mock官方文档地址:

https://docs.python.org/3/library/unittest.mock.html#the-patchers

关于@patch.object()的用法截图以下:

实现代码以下:文件名:test_03.py

import requests
import unittest

from mock import patch


class PayApi():

@staticmethod
def auth(card,amount):
pay_url = "http:moni.com"
data = {"card":card,"amount":amount}
response = requests.post(pay_url,data = data)
return response

def pay(self,user_id,card,amount):
response = self.auth(card,amount)
try:
if response['status_code'] == '200':
print("用户{}支付金额{}成功".format(user_id,amount))
return "支付成功"
elif response['status_code'] == '500':
print("用户{}支付失败,金额不变".format(user_id))
return "支付失败"
else:
return "未知错误"
except Exception:
return "Error, 服务器异常!"


class TestPayApi(unittest.TestCase):

def setUp(self):
self.pay = PayApi()

def tearDown(self):
pass

# @mock.patch("test_03.PayApi")
@patch.object(PayApi,'auth')
def test_success(self,mock_auth):
mock_auth.return_value = {'status_code':'200'}
statusmsg = self.pay.pay('1000','12345','10000')
self.assertEqual(statusmsg,'支付成功')

@patch.object(PayApi,'auth')
def test_fail(self,mock_auth):
mock_auth.return_value = {'status_code':'500'}
statusmsg = self.pay.pay('jsdn','6222xxx','10000')
self.assertEqual(statusmsg,'支付失败')

@patch.object(PayApi,'auth')
def test_error(self,mock_auth):
mock_auth.return_value = {'status_code':'300'}
statusmsg = self.pay.pay('jsdn', '6222xxx', '20000')
self.assertEqual(statusmsg,'未知错误')

@patch.object(PayApi, 'auth')
def test_exception(self, mock_auth):
mock_auth.return_value = {'status_codeq':'300'}
statusmsg = self.pay.pay('jsdn', '6222xxx', '20000')
self.assertEqual(statusmsg, 'Error, 服务器异常!')


if __name__ == '__main__':
unittest.main(verbosity=2)

运行结果以下:

相关文章
相关标签/搜索