小编wiz*_*owl的帖子

在python鼻子测试中模拟flask.request

我正在为通过 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 mocking nose

9
推荐指数
2
解决办法
1万
查看次数

在json中格式化Flask应用程序日志

我正在使用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中格式化.我一直在寻找负责创建此输出但没有成功的记录器/代码.

这个输出在哪里生成?是否有机制来更改此记录信息的格式?

python flask gunicorn

8
推荐指数
1
解决办法
3172
查看次数

标签 统计

python ×2

flask ×1

gunicorn ×1

mocking ×1

nose ×1