如何(是否需要)在不引入冗余库的前提下验收测试简单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
相关产品推荐
相关产品推荐

