PregoPal / test_report.html
J.B-Lin
feat: add i18n (zh/en) language switcher + fix matplotlib Chinese font rendering
9046d8e
Raw
History Blame Contribute Delete
37.1 kB
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PregoPal 测试报告</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: -apple-system, 'Segoe UI', sans-serif; background: #f5f5f5; padding: 20px; }
.container { max-width: 1200px; margin: 0 auto; }
.header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; border-radius: 12px; margin-bottom: 20px; }
.header h1 { font-size: 28px; margin-bottom: 10px; }
.header p { opacity: 0.9; }
.summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; margin-bottom: 20px; }
.summary-card { background: white; padding: 20px; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); text-align: center; }
.summary-card .number { font-size: 36px; font-weight: bold; }
.summary-card .label { color: #666; margin-top: 5px; }
.summary-card.total .number { color: #2196F3; }
.summary-card.passed .number { color: #4CAF50; }
.summary-card.failed .number { color: #f44336; }
.summary-card.rate .number { color: #FF9800; }
table { width: 100%; background: white; border-radius: 10px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.1); border-collapse: collapse; }
th { background: #f8f9fa; padding: 12px 15px; text-align: left; font-weight: 600; color: #333; border-bottom: 2px solid #dee2e6; }
td { padding: 10px 15px; border-bottom: 1px solid #eee; }
tr:hover { background: #f8f9fa; }
pre { background: #f5f5f5; padding: 8px; border-radius: 4px; font-size: 12px; max-height: 100px; overflow: auto; }
.footer { text-align: center; color: #999; margin-top: 20px; font-size: 14px; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>PregoPal 测试报告</h1>
<p>生成时间: 2026-06-09 00:40:53 | 测试框架: 内置 TestRunner</p>
</div>
<div class="summary">
<div class="summary-card total">
<div class="number">110</div>
<div class="label">总用例数</div>
</div>
<div class="summary-card passed">
<div class="number">110</div>
<div class="label">通过</div>
</div>
<div class="summary-card failed">
<div class="number">0</div>
<div class="label">失败</div>
</div>
<div class="summary-card rate">
<div class="number">100.0%</div>
<div class="label">通过率</div>
</div>
</div>
<table>
<thead>
<tr>
<th>状态</th>
<th>测试类</th>
<th>测试方法</th>
<th>描述</th>
<th>结果</th>
<th>错误信息</th>
</tr>
</thead>
<tbody>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_compare_focus_nutrients</td>
<td>应返回重点关注营养素列表</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_compare_with_intake_deficit</td>
<td>摄入不足时应标记 deficit</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_compare_with_intake_missing</td>
<td>缺失数据应标记 missing</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_compare_with_intake_sufficient</td>
<td>摄入充足时应标记 sufficient</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_format_comparison_table</td>
<td>对比表应包含表头和分隔线</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_get_rni_early</td>
<td>孕早期 RNI 应包含关键营养素</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_get_rni_lactation</td>
<td>哺乳期 RNI 钙需求应最高</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_get_rni_late</td>
<td>孕晚期 RNI 蛋白质需求应最高</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_get_rni_mid</td>
<td>孕中期 RNI 铁需求应增加</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_get_stages</td>
<td>应返回所有阶段</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDRIsParser</td>
<td>test_load</td>
<td>load() 应返回完整结构</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietaryGuideParser</td>
<td>test_core_principles_count</td>
<td>应有 6 条核心建议</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietaryGuideParser</td>
<td>test_format_for_prompt</td>
<td>format_for_prompt 应返回非空字符串</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietaryGuideParser</td>
<td>test_get_recommendations_fallback</td>
<td>未知阶段应返回孕中期</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietaryGuideParser</td>
<td>test_get_recommendations_late</td>
<td>孕晚期推荐量应不同</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietaryGuideParser</td>
<td>test_get_recommendations_mid</td>
<td>孕中期应返回正确的推荐量</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietaryGuideParser</td>
<td>test_load</td>
<td>load() 应返回完整结构</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestLoadAllStandards</td>
<td>test_compile_to_presets</td>
<td>compile_standards_to_presets 应生成缓存文件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestLoadAllStandards</td>
<td>test_load_all</td>
<td>load_all_standards 应返回所有标准</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_evaluate_above_range</td>
<td>体重高于标准应返回 warning</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_evaluate_below_range</td>
<td>体重低于标准应返回 warning</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_evaluate_invalid_bmi</td>
<td>无效 BMI 应返回 error</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_evaluate_within_range</td>
<td>体重在标准范围内应返回 ok</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_get_standard_boundary</td>
<td>边界值测试</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_get_standard_low_bmi</td>
<td>低体重 BMI (<18.5) 应返回低体重标准</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_get_standard_normal_bmi</td>
<td>正常 BMI (18.5-24) 应返回正确标准</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_get_standard_obese</td>
<td>肥胖 BMI (>=28) 应返回肥胖标准</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_get_standard_overweight</td>
<td>超重 BMI (24-28) 应返回超重标准</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestWeightStandardParser</td>
<td>test_load_returns_standards</td>
<td>load() 应返回结构化数据</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestLoadAll</td>
<td>test_format_all_for_prompt</td>
<td>test_format_all_for_prompt</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestLoadAll</td>
<td>test_load_all_family_info</td>
<td>test_load_all_family_info</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestMemoryManager</td>
<td>test_add_daily</td>
<td>test_add_daily</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestMemoryManager</td>
<td>test_add_event</td>
<td>test_add_event</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestMemoryManager</td>
<td>test_format_for_prompt_empty</td>
<td>test_format_for_prompt_empty</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestMemoryManager</td>
<td>test_format_for_prompt_with_data</td>
<td>test_format_for_prompt_with_data</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestMemoryManager</td>
<td>test_load_all_empty</td>
<td>test_load_all_empty</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestMemoryManager</td>
<td>test_load_all_with_data</td>
<td>test_load_all_with_data</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPreferenceManager</td>
<td>test_add_member</td>
<td>test_add_member</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPreferenceManager</td>
<td>test_add_member_update</td>
<td>test_add_member_update</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPreferenceManager</td>
<td>test_format_for_prompt_empty</td>
<td>test_format_for_prompt_empty</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPreferenceManager</td>
<td>test_format_for_prompt_with_data</td>
<td>test_format_for_prompt_with_data</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPreferenceManager</td>
<td>test_load_all_empty</td>
<td>test_load_all_empty</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPreferenceManager</td>
<td>test_load_all_with_data</td>
<td>test_load_all_with_data</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestRecipeManager</td>
<td>test_add_duplicate_recipe</td>
<td>test_add_duplicate_recipe</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestRecipeManager</td>
<td>test_add_recipe</td>
<td>test_add_recipe</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestRecipeManager</td>
<td>test_ensure_file_creates</td>
<td>test_ensure_file_creates</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestRecipeManager</td>
<td>test_format_for_prompt_empty</td>
<td>test_format_for_prompt_empty</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestRecipeManager</td>
<td>test_format_for_prompt_with_data</td>
<td>test_format_for_prompt_with_data</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestRecipeManager</td>
<td>test_get_names</td>
<td>test_get_names</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestRecipeManager</td>
<td>test_load_all_empty</td>
<td>test_load_all_empty</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestRecipeManager</td>
<td>test_load_all_with_recipes</td>
<td>test_load_all_with_recipes</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_all_types</td>
<td>综合提取所有类型</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_diet_basic</td>
<td>基本饮食记录提取</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_diet_empty</td>
<td>无饮食记录应返回空列表</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_diet_multiple</td>
<td>多条饮食记录提取</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_memory</td>
<td>家庭记忆提取</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_preference</td>
<td>偏好提取</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_recipe</td>
<td>菜谱提取</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_thinking</td>
<td>思考步骤提取</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_extract_weight</td>
<td>体重提取</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_fallback_extract_diet</td>
<td>fallback 关键词匹配</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_fallback_extract_thinking</td>
<td>fallback 思考步骤匹配</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_get_extract_prompt</td>
<td>提取提示词应包含日期</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_robust_extract_with_fallback</td>
<td>综合提取:正则失败时用 fallback</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDietExtractor</td>
<td>test_robust_extract_with_markup</td>
<td>综合提取:正则优先</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDailyStatus</td>
<td>test_days_since_last_summary</td>
<td>距离上次总结的天数</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDailyStatus</td>
<td>test_get_last_summary_date</td>
<td>获取最近总结日期</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDailyStatus</td>
<td>test_is_today_done</td>
<td>检查今日是否完成</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDailyStatus</td>
<td>test_load_empty</td>
<td>空文件应返回空字典</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDailyStatus</td>
<td>test_mark_day_ended</td>
<td>标记今日结束</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDailyStatus</td>
<td>test_mark_summary_done</td>
<td>标记总结完成</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestDailyStatus</td>
<td>test_should_three_day_summary_false</td>
<td>刚总结完不应触发三天总结</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestLoopState</td>
<td>test_all_states_defined</td>
<td>所有状态应被定义</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestLoopState</td>
<td>test_state_count</td>
<td>应有 9 个状态</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPregoPalLoop</td>
<td>test_default_plugins_registered</td>
<td>应注册所有默认插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPregoPalLoop</td>
<td>test_get_briefing_empty</td>
<td>初始简报应为空</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPregoPalLoop</td>
<td>test_get_errors_empty</td>
<td>初始错误列表为空</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPregoPalLoop</td>
<td>test_get_thinking_keywords</td>
<td>初始思考关键词</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPregoPalLoop</td>
<td>test_loop_initialization</td>
<td>初始化应处于 LAUNCH 状态</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPregoPalLoop</td>
<td>test_plugin_count</td>
<td>应有 9 个默认插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestTransitions</td>
<td>test_already_done_flow</td>
<td>今日已完成的流程</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestTransitions</td>
<td>test_full_flow</td>
<td>完整流程应能到达 DONE</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestTransitions</td>
<td>test_launch_transitions</td>
<td>LAUNCH 应有 2 个转移</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestTransitions</td>
<td>test_three_day_flow</td>
<td>触发三天总结的流程</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestAnalyzePlugins</td>
<td>test_dri_analysis_plugin</td>
<td>DRIs 分析插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestBriefPlugins</td>
<td>test_briefing_generator_plugin</td>
<td>简报生成插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestConsolidatePlugins</td>
<td>test_preset_writer_plugin</td>
<td>预设写入插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestFamilyQuizPlugins</td>
<td>test_family_recipe_quiz_plugin</td>
<td>家庭菜谱检查插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestFamilyQuizPlugins</td>
<td>test_weight_quiz_plugin</td>
<td>体重询问检查插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginBase</td>
<td>test_get_plugins_by_stage</td>
<td>按阶段获取插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginBase</td>
<td>test_loop_context_defaults</td>
<td>LoopContext 默认值</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginBase</td>
<td>test_plugin_registry_init</td>
<td>注册中心初始化应为空</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginBase</td>
<td>test_plugin_result_custom</td>
<td>PluginResult 自定义值</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginBase</td>
<td>test_plugin_result_defaults</td>
<td>PluginResult 默认值</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginBase</td>
<td>test_register_plugin</td>
<td>注册插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginBase</td>
<td>test_unregister_plugin</td>
<td>注销插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_briefing_generator_execution</td>
<td>简报生成执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_diet_summary_execution</td>
<td>饮食总结执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_dri_analysis_execution</td>
<td>DRIs 分析执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_dummy_plugin_execution</td>
<td>虚拟插件执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_family_memory_execution</td>
<td>家庭记忆执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_family_recipe_quiz_execution</td>
<td>家庭菜谱检查执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_preset_writer_execution</td>
<td>预设写入执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_three_day_summary_execution</td>
<td>三天总结执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_weight_check_execution</td>
<td>体重检查执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestPluginExecution</td>
<td>test_weight_quiz_execution</td>
<td>体重询问检查执行</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestSummarizePlugins</td>
<td>test_diet_summary_plugin</td>
<td>饮食总结插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestSummarizePlugins</td>
<td>test_family_memory_plugin</td>
<td>家庭记忆插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestSummarizePlugins</td>
<td>test_weight_check_plugin</td>
<td>体重检查插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
<tr>
<td>PASS</td>
<td>TestThreeDayPlugins</td>
<td>test_three_day_summary_plugin</td>
<td>三天总结插件</td>
<td style="color:#4CAF50;font-weight:bold">通过</td>
<td></td>
</tr>
</tbody>
</table>
<div class="footer">
<p>PregoPal v5 | 测试耗时: 0.01秒 | 110/110 通过</p>
</div>
</div>
</body>
</html>