development

단위 테스트에서 JSON으로 요청을 보내는 방법

big-blog 2020. 9. 15. 18:55
반응형

단위 테스트에서 JSON으로 요청을 보내는 방법


요청에서 JSON을 사용하는 Flask 응용 프로그램 내에 코드가 있으며 다음과 같이 JSON 개체를 가져올 수 있습니다.

Request = request.get_json()

이것은 잘 작동했지만 Python의 unittest 모듈을 사용하여 단위 테스트를 만들려고 시도 중이며 요청과 함께 JSON을 보내는 방법을 찾는 데 어려움이 있습니다.

response=self.app.post('/test_function', 
                       data=json.dumps(dict(foo = 'bar')))

이것은 나에게 준다 :

>>> request.get_data()
'{"foo": "bar"}'
>>> request.get_json()
None

Flask에는 post 요청 내에서 json = dict (foo = 'bar') 설정할 수있는 JSON 인수가있는 것 같지만 unittest 모듈로이를 수행하는 방법을 모르겠습니다.


게시물을 다음으로 변경

response=self.app.post('/test_function', 
                       data=json.dumps(dict(foo='bar')),
                       content_type='application/json')

고쳤다.

user3012759에게 감사드립니다.


업데이트 : Flask 1.0 릴리스 flask.testing.FlaskClient메서드는 json인수와 Response.get_json메서드 추가를 허용 하므로 예제를 참조하십시오 .

Flask 0.x의 경우 아래 영수증을 사용할 수 있습니다.

from flask import Flask, Response as BaseResponse, json
from flask.testing import FlaskClient
from werkzeug.utils import cached_property


class Response(BaseResponse):
    @cached_property
    def json(self):
        return json.loads(self.data)


class TestClient(FlaskClient):
    def open(self, *args, **kwargs):
        if 'json' in kwargs:
            kwargs['data'] = json.dumps(kwargs.pop('json'))
            kwargs['content_type'] = 'application/json'
        return super(TestClient, self).open(*args, **kwargs)


app = Flask(__name__)
app.response_class = Response
app.test_client_class = TestClient
app.testing = True

참고URL : https://stackoverflow.com/questions/28836893/how-to-send-requests-with-jsons-in-unit-tests

반응형