參考文章:html
版權聲明 前端
出處: 博客園Linux超的技術博客--https://www.cnblogs.com/linuxchao/python
您的支持是對博主最大的鼓勵,感謝您的認真閱讀linux
本文版權歸做者全部,歡迎轉載,但未經做者贊成必須保留此段聲明, 且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。後端
做者: Linux超服務器
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)
運行結果以下: