您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 单元测试(烧瓶 – 静止)GET API调用时获得500内部服务器错误

5b51 2022/1/14 8:23:37 python 字数 6477 阅读 589 来源 www.jb51.cc/python

我已经从我的烧瓶式API模块中单独测试了所有方法.现在我想通过实际进行API调用来测试get方法.我期待这个测试的错误400.我的资源类class Response(Resource): @marshal_with(response_params_get_responses_on_job) def get(self, filter_name

概述

我已经从我的烧瓶式API模块中单独测试了所有方法.现在我想通过实际进行API调用来测试get方法.我期待这个测试的错误400.

我的资源类

class Response(Resource):

    @marshal_with(response_params_get_responses_on_job)
    def get(self,filter_name=None):
        try:
            response = self.process_get_request(filter_name)
            if not response['users']:
                raise MyValidationError("No data found")
            return response
        except MyValidationError as err:
            abort(404,message=err)
        except ValueError as mistake:
            abort(400,message=mistake)

我的单位测试

# TODO - Failing!
@mock.patch('application.resources.response.Response.process_get_request',autospec=True)
def test_get_400(self,process_get_request_mock):
    process_get_request_mock.side_effect = ValueError("some error")
    app = Flask(__name__)
    app.debug = True
    api = Api(app,prefix='/api/v2')
    api.add_resource(Response,'/user/responses',endpoint='job_responses')
    api.init_app(app)
    with app.test_client() as client:
        resp = client.get('/api/v2/user/responses',environ_base={'HTTP_USER_AGENT': 'Chrome'},headers={'Content-type': 'application/json'})
        self.assertEqual(resp.status_code,400)

我的测试失败,因为我得到的响应是错误500

AssertionError: 500 != 400

堆栈跟踪

Failure
Traceback (most recent call last):
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/mock.py",line 1201,in patched
return func(*args,**keywargs)
File "/home/hussain/workspace/my-app/tests/unittests/test_Response.py",line 38,in test_get_400
headers={'Content-type': 'application/json'})
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/werkzeug/test.py",line 774,in get
return self.open(*args,**kw)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/testing.py",line 108,in open
follow_redirects=follow_redirects)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/werkzeug/test.py",line 742,in open
response = self.run_wsgi_app(environ,buffered=buffered)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/werkzeug/test.py",line 659,in run_wsgi_app
rv = run_wsgi_app(self.application,environ,line 867,in run_wsgi_app
app_rv = app(environ,start_response)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py",line 1836,in __call__
return self.wsgi_app(environ,line 1820,in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_cors/extension.py",line 110,in wrapped_function
return cors_after_request(app.make_response(f(*args,**kwargs)))
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py",line 270,in error_router
return original_handler(e)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py",in error_router
return original_handler(e)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py",line 1403,in handle_exception
reraise(exc_type,exc_value,tb)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py",line 267,in error_router
return self.handle_error(e)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_restful/__init__.py",in error_router
return self.handle_error(e)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py",line 1817,in wsgi_app
response = self.full_dispatch_request()
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask/app.py",line 1477,in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/hussain/workspace/venv/local/lib/python2.7/site-packages/flask_cors/extension.py",line 1363,in handle_user_exception
assert exc_value is e
AssertionError

通过在get方法中放置一个调试点,我看到执行一直持续到中止(400,消息=错误).

然后发生了什么?为什么我的测试失败了?

问题出在我的代码中.正如米歇尔所说,我的测试已经找到了.

中止方法中的消息kwarg应该是一个字符串,而是我将它传递给异常对象.所以我在中止线上得到了一个例外.

所以我纠正了它

abort(400,message=mistake.message)

或者我也可以写

abort(400,message=str(mistake))

现在我的考试正在通过.

总结

以上是编程之家为你收集整理的python – 单元测试(烧瓶 – 静止)GET API调用时获得500内部服务器错误全部内容,希望文章能够帮你解决python – 单元测试(烧瓶 – 静止)GET API调用时获得500内部服务器错误所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶