[英]How to unit test a POST method in python?
我有一個將包含JSON的POST發送到Elasticsearch實例的方法。 我正在嘗試編寫一個單元測試來驗證發送的JSON的內容,但是我不確定該如何進行。 我應該在python中創建本地服務器並讓其驗證POST或其他內容嗎? 我目前有這個:
class TestAnalytics(BaseTest):
def test_post(self):
info = {"test1": "value1", "test2": "value2"}
resp = requests.post(config.tool_repo_urls['es_url'], data=json.dumps(info), headers={'Content-Type': 'application/json'})
assert_equal(resp.status_code, 200) # verify valid response code
創建本地服務器將是一個過大的殺傷力,您可以做的是使用unitest庫修補post()
方法,以便它使用修補方法將數據發送到內部斷言方法,這里是鏈接https://docs.python.org /3/library/unittest.mock-examples.html 。 您應該查看第27.6.2節。 貼片裝飾器
例:
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()
方法assert_called_with
檢查是否使用調用中指定的參數精確調用了打補丁的方法。 在這種情況下,它是True
更改為例如:
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
可以做什么的完整規格
EDIT2
最近發現了單元測試的這個小程序requests
如果要驗證發送的JSON,則應嘗試json.loads()
,如果您傳遞的輸入不能被解碼為JSON,則會拋出ValueError。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.