gpt4 book ai didi

python - 如何在 python 中对 POST 方法进行单元测试?

转载 作者:行者123 更新时间:2023-12-01 01:44:21 24 4
gpt4 key购买 nike

我有一个方法可以将包含 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()方法,这样它就可以使用patch方法将数据发送到你的内部断言方法,这里是链接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

下面是完整的工作示例编辑:

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检查是否完全使用其调用中指定的参数调用了修补的方法。在这种情况下,这是真的

将其更改为例如:

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 功能的完整规范

编辑2

最近发现了这个用于单元测试的小库requests

https://github.com/getsentry/responses

关于python - 如何在 python 中对 POST 方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51560850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com