我正在为通过 Flask 下的路由调用的代码编写测试用例。我不想通过设置测试应用程序并调用命中路由的 URL 来测试代码,我想直接调用该函数。为了完成这项工作,我需要模拟 flask.request 并且我似乎无法管理它。谷歌/stackoverflow 搜索导致了很多答案,这些答案展示了如何设置一个测试应用程序,这又不是我想要做的。
代码看起来像这样。
somefile.py
-----------
from flask import request
def method_called_from_route():
data = request.values
# do something with data here
test_somefile.py
----------------
import unittest
import somefile
class SomefileTestCase(unittest.TestCase):
@patch('somefile.request')
def test_method_called_from_route(self, mock_request):
# want to mock the request.values here
Run Code Online (Sandbox Code Playgroud)
我有两个问题。
(1) 如我在上面勾画的那样修补请求不起作用。我收到类似于“AttributeError: 'Blueprint' object has no attribute 'somefile'”的错误
(2) 如果我可以修补它,我不知道如何准确地模拟请求对象。它实际上没有 return_value 因为它不是一个函数。
我再次找不到任何关于如何做到这一点的例子,所以我觉得一个新问题是可以接受的。
我正在使用Python/Flask应用程序并尝试在json中对日志进行格式化(按行).
使用python-json-logger包,我修改了app.logger的格式化程序,如下所示:
from pythonjsonlogger import jsonlogger
formatter = jsonlogger.JsonFormatter(
'%(asctime) %(levelname) %(module) %(funcName) %(lineno) %(message)')
app.logger.handlers[0].setFormatter(formatter)
Run Code Online (Sandbox Code Playgroud)
这按预期工作.传递给的任何消息app.logger都在json中正确格式化.
但是,应用程序也会自动记录所有请求.此信息显示在标准输出中,如下所示:
127.0.0.1 - - [19/Jun/2015 12:22:03] "GET /portal/ HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)
我希望这些信息也可以在json中格式化.我一直在寻找负责创建此输出但没有成功的记录器/代码.
这个输出在哪里生成?是否有机制来更改此记录信息的格式?