參考:https://www.jianshu.com/p/15594044ab27函數
pip install mock
pip install pytest-mock (至關於mock的升級版)
舉例:測試
# 文件路徑:common/mock_demo.py import requests def mock_request(url): """須要被mock的請求""" return requests.get(url).status_code def invoke_mock_request(url): return mock_request(url)
測試用例url
import mock from pytest_mock import mocker from common.mock_demo import invoke_mock_request def test_mock_1(mocker): """方法一:使用的是pytest-mock 中的mocker""" mocker.patch("common.mock_demo.mock_request", return_value=300) # 被mock請求函數的路徑必定要寫對 assert invoke_mock_request("https://www.baidu.com/") == 300 def test_mock_2(): """方法二:使用的 mock 中patch方法""" with mock.patch("common.mock_demo.mock_request", return_value=300) as foo: assert invoke_mock_request("https://www.baidu.com/") == foo.return_value @mock.patch("common.mock_demo.mock_request", return_value=300) def test_mock_3(mock_request): """方法三:使用的裝飾器的方式對mock對象的函數返回值進行替換""" assert invoke_mock_request("https://www.baidu.com/") == mock_request.return_value
即:在調用 invoke_mock_request() 以前先對其接口依賴的 mock_request() 方法的返回值能夠替換,這樣的話無論其方法的返回值如何變化,咱們只須要關注這次 mock 便可spa