创建本地服务器是一种矫枉过正的行为,你可以做的是使用unitest库来修补post()
方法,因此它使用 patch 方法将数据发送到您的内部断言方法,这是链接https://docs.python.org/3/library/unittest.mock-examples.html https://docs.python.org/3/library/unittest.mock-examples.html。你应该看看部分27.6.2。补丁装饰器
Example:
class TestAnalytics(BaseTest):
@patch('requests.post')
def test_post(self,mock_post):
info = {"test1": "value1", "test2": "value2"}
resp = requests.post(config.tool_repo_urls['es_url'], data=json.dumps(info), headers={'Content-Type': 'application/json'})
#Some checks done on mock_post object
下面是完整的工作示例EDIT:
import json
from unittest import TestCase
from unittest.mock import patch
import requests
class TestAnalytics(TestCase):
@patch('requests.post')
def test_post(self, mock_post):
info = {"test1": "value1", "test2": "value2"}
resp = requests.post("www.someurl.com", data=json.dumps(info), headers={'Content-Type': 'application/json'})
mock_post.assert_called_with("www.someurl.com", data=json.dumps(info), headers={'Content-Type': 'application/json'})
TestAnalytics().test_post()
Method assert_called_with
检查是否完全使用其调用中指定的参数调用了修补的方法。在这种情况下这是真的
将其更改为例如:
mock_post.assert_called_with("www.someurl.com", data=json.dumps(info))
会给:
AssertionError: Expected call: post('www.someurl.com', data='{"test1": "value1", "test2": "value2"}')
Actual call: post('www.someurl.com', data='{"test1": "value1", "test2": "value2"}', headers={'Content-Type': 'application/json'})
您还可以使用mock_post
反对检查个别参数,请检查上面的链接以获取完整的规格MagicMock
can do
EDIT2
最近发现了这个用于单元测试的小库requests
https://github.com/getsentry/responses https://github.com/getsentry/responses