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

为自研RESTful应用编写单元测试:验证GET请求与200状态码

为你的Flask RESTful应用编写单元测试

嘿,看起来你已经把Flask RESTful应用的基础架子搭得很稳了——服务器正常跑,还能返回JSON数据,现在就差给它加上单元测试来确保核心功能靠谱对吧?我来帮你搞定验证GET请求的JSON响应和200状态码这两个测试用例。

首先先确认下你的项目结构(方便咱们对应文件位置):

├── MealAPP
├── app
│   ├── __init__.py
│   └── models.py
├── instance
│   ├── __init__.py
│   └── config.py
├── manage.py
├── requirements.txt
├── run.py
└── test_mealapp.py

第一步:配置测试环境(可选但推荐)

为了避免测试影响到生产数据,建议在instance/config.py里添加测试专用的配置,比如用内存数据库:

# instance/config.py
class Config:
    DEBUG = False
    SQLALCHEMY_DATABASE_URI = 'sqlite:///mealapp.db'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class TestConfig(Config):
    DEBUG = True
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'  # 内存数据库,测试完自动销毁

然后在app/__init__.py里确保能根据环境加载对应的配置:

# app/__init__.py
from flask_api import FlaskAPI
from flask_sqlalchemy import SQLAlchemy
from instance.config import Config, TestConfig

db = SQLAlchemy()

def create_app(config_name='development'):
    app = FlaskAPI(__name__, instance_relative_config=True)
    # 根据传入的配置名加载对应配置
    if config_name == 'testing':
        app.config.from_object(TestConfig)
    else:
        app.config.from_object(Config)
    
    db.init_app(app)
    
    # 这里假设你已经注册了路由,比如:
    # from app.views import meals_blueprint
    # app.register_blueprint(meals_blueprint)
    
    return app

第二步:编写测试用例(test_mealapp.py)

咱们用Python自带的unittest框架来写测试,这样不用额外安装依赖。下面是完整的测试代码:

# test_mealapp.py
import unittest
from app import create_app, db

class TestMealApp(unittest.TestCase):
    def setUp(self):
        """测试前的准备工作:创建测试客户端,初始化数据库"""
        self.app = create_app(config_name='testing')
        self.client = self.app.test_client()
        
        # 推送应用上下文,创建数据库表
        with self.app.app_context():
            db.create_all()
    
    def tearDown(self):
        """测试后的清理工作:销毁数据库"""
        with self.app.app_context():
            db.session.remove()
            db.drop_all()
    
    def test_get_request_status_code(self):
        """测试GET请求返回200状态码"""
        # 替换成你的实际API端点,比如'/meals'
        response = self.client.get('/meals')
        self.assertEqual(response.status_code, 200)
    
    def test_get_request_returns_json(self):
        """测试GET请求返回JSON格式数据"""
        response = self.client.get('/meals')
        # 检查响应的Content-Type是否是JSON
        self.assertEqual(response.content_type, 'application/json')
        # 可选:如果有预期的JSON结构,还可以验证具体内容
        # expected_data = {"meals": []}
        # self.assertEqual(response.get_json(), expected_data)

if __name__ == '__main__':
    unittest.main()

第三步:运行测试

在项目根目录下执行以下命令就能跑测试了:

python -m unittest test_mealapp.py

如果一切正常,你会看到类似这样的输出:

..
----------------------------------------------------------------------
Ran 2 tests in 0.010s

OK

一些小提示

  • 如果你用的是pytest而不是unittest,代码结构会更简洁,但上面的unittest方案是Python原生的,不用额外装包
  • 记得把测试里的'/meals'替换成你实际的API端点路径
  • 如果你的API需要认证,还可以在测试里添加认证头,比如self.client.get('/meals', headers={'Authorization': 'Bearer token'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:52:18