You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask jsonify返回内容的测试问题及有效验证方案

Flask /status路由的测试问题与解决

已实现的/status路由

我在Flask中实现了/status路由,返回JSON数组响应,访问http://127.0.0.1:5000/status时浏览器会显示如下内容:

[
     {
       "user": "admin"
     },
     { 
       "result": "OK - Healthy"
     }
]

路由代码如下:

@app.route('/status')
def health_check():
    response = [
        {'user': 'admin'},
        {'result': 'OK - Healthy'}
    ]
    
    return jsonify(response)

unittest测试的问题

最初用unittest写的测试用例逻辑错误,无法验证响应的具体内容:

class HealthStatusCase(unittest.TestCase):

    def test_health_check(self):
        response = health_check()
        self.assertEqual(response, ['200 OK'])

问题核心:直接调用health_check()得到的是Flask的Response对象,不是字符串或列表,且没有模拟请求环境。正确做法是使用Flask测试客户端发送请求,解析响应的JSON数据:

from flask import Flask
import unittest

# 导入你的Flask应用实例
app = Flask(__name__)

class HealthStatusCase(unittest.TestCase):
    def setUp(self):
        self.app = app.test_client()
        self.app.testing = True

    def test_health_check(self):
        response = self.app.get('/status')
        # 验证响应状态码
        self.assertEqual(response.status_code, 200)
        # 解析响应的JSON内容
        data = response.get_json()
        # 验证具体键值对
        self.assertEqual(data[0]['user'], 'admin')
        self.assertEqual(data[1]['result'], 'OK - Healthy')

pytest测试的问题

改用pytest时,错误地把测试用例定义成了fixture——fixture是提供测试依赖的工具,不是测试用例本身,未被调用的fixture不会执行,这就是修改断言为错误值仍通过的原因。正确写法是把测试写成普通函数,依赖client fixture:

第一步:配置pytest的客户端fixture(放在conftest.py中)

# conftest.py
import pytest
from your_app_module import app

@pytest.fixture
def client():
    app.testing = True
    with app.test_client() as client:
        yield client

第二步:编写正确的测试用例

def test_health_check(client):
    response = client.get('/status')
    # 先验证状态码
    assert response.status_code == 200
    # 解析JSON并验证完整内容
    data = response.get_json()
    assert data == [
        {'user': 'admin'},
        {'result': 'OK - Healthy'}
    ]
    # 也可以单独验证某个键值对
    assert data[1]['result'] == 'OK - Healthy'

这样修改断言内容为错误值时,测试会正确失败,保证了测试的有效性。

内容的提问来源于stack exchange,提问作者bgarcial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:31:09