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

如何(是否需要)在不引入冗余库的前提下验收测试简单Flask应用?

结论:不需要强制使用应用工厂或Blueprint

你的应用场景非常简单(无数据库、仅表单计算+结果展示),当前的全局app实例写法完全够用,没必要强行引入应用工厂或Blueprint这类为大型/复杂项目设计的模式。


1. 关于应用工厂的可选说明(如果你想尝试)

如果之后需要扩展应用,再考虑引入应用工厂也不迟。现在要加的话,直接把create_app()放在你现有脚本里即可:

from flask import Flask, request, render_template
import calculators.simple_calc.simple_calc as sc
from calculators.website.forms.simple_calc import SimpleCalcForm

def create_app(config_overrides=None):
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'seekrit'
    # 支持传入测试配置
    if config_overrides:
        app.config.update(config_overrides)

    @app.route('/', methods=['GET', 'POST'])
    def simple_calc_page():
        form = SimpleCalcForm()
        calc = None
        if form.validate_on_submit():
            calc = sc.SimpleCalc(request.form)
        return render_template('simple_calc_page.html', form=form, calc=calc)
    
    return app

# 正常运行应用时调用
if __name__ == '__main__':
    app = create_app()
    app.run()
  • 调用方式:
    • 本地运行时,直接执行脚本,if __name__ == '__main__'块会自动调用create_app()启动服务;
    • 测试时,在测试文件里导入create_app,创建带测试配置的实例:app = create_app({'TESTING': True})。

2. 针对当前代码的简单验收测试方案

不用改现有代码,直接用Flask自带的测试客户端写测试即可,步骤如下:

步骤1:创建测试文件(比如test_calc.py)

import unittest
# 替换成你的脚本文件名(比如app.py)
from app import app

class TestSimpleCalc(unittest.TestCase):
    def setUp(self):
        # 初始化测试客户端,开启测试模式
        self.client = app.test_client()
        app.config['TESTING'] = True
        # 测试环境可以用单独的密钥
        app.config['SECRET_KEY'] = 'test-secret'

    def test_get_form_page(self):
        # 测试GET请求是否正常返回表单页面
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)
        # 替换成你页面中实际存在的文本,比如表单标题
        self.assertIn(b'简单计算器', response.data)

    def test_valid_calculation_submit(self):
        # 测试合法表单提交后的结果展示
        # 替换成你的表单实际字段名,比如num1、num2
        response = self.client.post('/', data={
            'num1': '10',
            'num2': '4'
        })
        self.assertEqual(response.status_code, 200)
        # 替换成计算后的预期结果文本,比如"结果:14"
        self.assertIn(b'结果:14', response.data)

    def test_invalid_form_submit(self):
        # 测试非法输入(比如非数字)的处理
        response = self.client.post('/', data={
            'num1': 'abc',
            'num2': '4'
        })
        # 验证页面返回200且显示错误提示
        self.assertEqual(response.status_code, 200)
        self.assertIn(b'请输入有效的数字', response.data)

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

步骤2:运行测试

直接执行测试文件即可:

python test_calc.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:52:24