在python中模拟bottle.request对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中模拟bottle.request对象相关的知识,希望对你有一定的参考价值。
我正在使用bottle框架。我的代码就像
from bottle import request
def abc():
x = request.get_header('x')
...
...
data = request.json()
...
...
我正在为这个函数编写UT,我想模拟get_header
和json
的bottle.request
,并从中返回我的模拟数据。
我试过了。
from mock import patch
@patch('bottle.request.headers', return_value={'x': 'x'})
@patch('bottle.request.json', return_value=...)
def test_abc(self, _, __):
...
...
但它给request.headers
的错误是只读的。我还要嘲笑request.json
。
在此先感谢您的帮助:)。
答案
一个简单的替代方法,模拟一个瓶子请求,可以将它注入你的函数:
from bottle import request
def abc(_request=None):
if _request is not None:
request = _request
x = request.get_header('x')
...
...
data = request.json()
...
...
这应该是安全的,因为您的测试代码可以直接使用虚假请求对象调用您的视图,并且您的生产代码将跳过条件。
我不知道这对于带有命名参数的url路由是如何工作的,因为我从未使用过瓶子。
另一答案
检查瓶子,标题和json的源代码如下:
@DictProperty('environ', 'bottle.request.headers', read_only=True)
def headers(self):
''' A :class:`WSGIHeaderDict` that provides case-insensitive access to
HTTP request headers. '''
return WSGIHeaderDict(self.environ)
所以在我的pytest案例中,我修改了request.environ,如下所示:
def test_xxx(monkeypatch):
monkeypatch.setitem(request.environ, 'bottle.request.json', {'name': 'xxx', 'version': '0.1'})
add_xxx()
assert
另一答案
使用Boddle https://github.com/keredson/boddle
def test_abc(self, _, __):
with boddle(headers={'x':'x'}):
# tests
以上是关于在python中模拟bottle.request对象的主要内容,如果未能解决你的问题,请参考以下文章
Python Selenium.WebDriverWait 对Cookies的处理及应用『模拟登录』