SuperAPI AI 工具集

testing-and-quality-assurance

测试与质量

查看项目

更新于 10-16 08:46

技能介绍

用途:为 Chuuk Dictionary 后端提供 Pytest 测试实践,涵盖运行测试套件、使用共享 fixture 以及选择正确的 patch 位置。

主要能力与用法:在仓库根目录激活 .venv 后可运行 .venv/bin/python -m pytest 执行完整套件,也可用 -m unit、-m "not slow"、指定文件加 -v 等方式筛选。pytest.ini 设置 testpaths=tests 并启用 --strict-markers,未知标记会失败。必须为测试加标记:unit 表示无 I/O、无网络、不加载模型;integration 访问真实数据库或外部服务,CI 默认跳过;translation 加载 Helsinki 或 Ollama 模型,慢且重;slow 表示超过 5 秒。

共享 fixture 位于 tests/conftest.py:mock_db 为 session 级、形如 DictionaryDB 的 MagicMock;flask_app 为 session 级真实 Flask 应用,已把 DictionaryDB 替换为 mock_db;client 为 function 级 flask_app.test_client();auth_headers 当前设置了错误的 session 键,尚未修复,需在测试内联构建会话并 patch app.get_user_db 的 is_session_valid。mock 通过 patch("src.database.dictionary_db.DictionaryDB", return_value=mock_db) 在导入 app 前接线,不要再用 patch("app.dict_db", ...)。可 mock 的真实方法有 search_word、search_words、add_word、search_phrases、add_phrase;不存在的方法不要 mock。

翻译测试用 @pytest.mark.translation 与 @pytest.mark.slow,调用 HelsinkiTranslator 的 setup_models() 与 translate()。CI 建议使用 pytest -m "not slow and not translation and not integration" 以保持快速。

限制与陷阱:导入 app 会触发数据库初始化,因此不要在测试文件顶层导入 app,交给 fixture 处理;conftest 的 safe_open 会阻止打开 config/ 和 models/ 之外的文件;生产有两个 gunicorn worker,测试不应假设跨请求内存状态;WTF_CSRF_ENABLED=False 实际无效,因为应用未使用 Flask-WTF。tests/ 目录混有真实测试与探索脚本,仅 test 前缀文件会被收集。部分事实如具体 BLEU 控制方法暂未提供更多细节。