{ "title": "AI自进化 v2 接口自动化测试报告", "timestamp": "2026-05-30T08:47:27.487713", "total": 117, "passed": 117, "failed": 0, "pass_rate": "100.0%", "results": [ { "name": "Admin login", "passed": true, "detail": "", "priority": "P0" }, { "name": "Demo user login", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /skills - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /skills - code - field 'code' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /skills - data - field 'data' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /skills - returns list (6 skills)", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill has skill_name - field 'skill_name' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill has state - field 'state' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill has version - field 'version' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill has use_count - field 'use_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /skills/{name} - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill detail has code - field 'code' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill detail has data", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill detail - skill_name - field 'skill_name' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill detail - description - field 'description' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: PUT /skills/{name} - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /skills/{name}/history - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill history returns list (15 events)", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /skills/{name}/trajectories - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Trajectories has code - field 'code' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: POST /skills/{name}/freeze - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: POST /skills/{name}/unfreeze - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /skills/nonexistent - 404 - HTTP 404", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: DELETE /skills/nonexistent - 404 - HTTP 404", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /dashboard/skill-tree - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill tree has data - field 'data' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill tree - categories - field 'categories' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill tree - total_count - field 'total_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill tree - main_count - field 'main_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill tree - baby_count - field 'baby_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill tree - staging_count - field 'staging_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Skill tree - frozen_count - field 'frozen_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /dashboard/timeline - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Timeline returns list (23 events)", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /dashboard/timeline?event_type=edited - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Timeline filtered (7 events)", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /dashboard/statistics - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Statistics - ranking - field 'ranking' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Statistics - total_use_count - field 'total_use_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Statistics - category_distribution - field 'category_distribution' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Statistics - daily_trend - field 'daily_trend' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Statistics - low_use_skills - field 'low_use_skills' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /dashboard/profile - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Profile - level - field 'level' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Profile - level_title - field 'level_title' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Profile - dimensions - field 'dimensions' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Profile - tags - field 'tags' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Profile - growth_suggestions - field 'growth_suggestions' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /events - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Events list (23 events)", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Event has event_type - field 'event_type' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Event has skill_name - field 'skill_name' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Event has description - field 'description' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Event has created_at - field 'created_at' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: GET /events filtered - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: POST /trajectory/submit - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Trajectory submit - has status - field 'status' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v1: Trajectory submit - has id - field 'id' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: POST rollback to non-existent version - 404 - HTTP 404", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: POST rollback nonexistent skill - 404 - HTTP 404", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: GET /skills/{name}/versions - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Versions list (0 versions)", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: POST /skills/newborn_skill/publish - already published", "passed": true, "detail": "Skill already published: 该技能已发布到市场,不能重复发布", "priority": "P0" }, { "name": "v2: POST /skills/{name}/publish - non-main rejected", "passed": true, "detail": "State=staging", "priority": "P0" }, { "name": "v2: POST publish nonexistent skill - rejected with error in data", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: POST share-to-team - invalid team rejected", "passed": true, "detail": "团队不存在", "priority": "P0" }, { "name": "v2: POST share nonexistent skill - rejected", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: GET /pipeline/status - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Pipeline - scheduler_running - field 'scheduler_running' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Pipeline - watcher_status - field 'watcher_status' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Pipeline - pipeline_status - field 'pipeline_status' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Pipeline - discovered_count - field 'discovered_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Pipeline - done_count - field 'done_count' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Pipeline - total_skills - field 'total_skills' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Pipeline - total_trajectories - field 'total_trajectories' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: POST /pipeline/trigger", "passed": true, "detail": "流水线已触发", "priority": "P0" }, { "name": "v2: GET /watcher/status - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Watcher status - watcher_status", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Watcher status - pipeline_status", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Watcher status - scheduler_running", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Watcher status - skill_count", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Watcher status - trajectory_count", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: POST /watcher/restart", "passed": true, "detail": "进化引擎已重启", "priority": "P0" }, { "name": "v2: GET /admin/watchers (admin) - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Admin watchers - 1 users", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: GET /reports - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Reports list (0 reports)", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: GET /reports?report_type=weekly - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: POST /reports/generate (weekly)", "passed": true, "detail": "weekly报告生成完成", "priority": "P0" }, { "name": "v2: POST /reports/generate (monthly)", "passed": true, "detail": "weekly报告生成完成", "priority": "P0" }, { "name": "v2: GET /reports/{id} - HTTP 200", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Report detail - report_type - field 'report_type' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Report detail - period_start - field 'period_start' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Report detail - period_end - field 'period_end' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: Report detail - report_data - field 'report_data' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2: GET /reports/nonexistent - 404 - HTTP 404", "passed": true, "detail": "", "priority": "P0" }, { "name": "ISO: Skill isolation - no cross-user overlap", "passed": true, "detail": "", "priority": "P0" }, { "name": "ISO: Report isolation (demo has 0 reports)", "passed": true, "detail": "", "priority": "P0" }, { "name": "ISO: Pipeline status isolation - demo can query own", "passed": true, "detail": "", "priority": "P0" }, { "name": "ISO: Watcher status isolation - demo can query own", "passed": true, "detail": "", "priority": "P0" }, { "name": "ISO: Demo cannot access admin/watchers - 403", "passed": true, "detail": "", "priority": "P0" }, { "name": "ISO: Unauthenticated access rejected", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2 verify: reports/generate response code field - field 'code' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2 verify: reports/generate response message - field 'message' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2 verify: reports/{id} nonexistent 404 - HTTP 404", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2 verify: versions nonexistent returns empty", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2 verify: watcher/restart response code - field 'code' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "v2 verify: watcher/restart response message - field 'message' exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Table skill_versions exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Table evolution_reports exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Table skill_publish_records exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Table team_shared_skills exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Field evolution_trajectories.error_msg exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Field evolution_trajectories.retry_count exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Field evolution_trajectories.tasks_extracted exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Field messages.used_skills exists", "passed": true, "detail": "", "priority": "P0" }, { "name": "DB: Field user_evolution_config.watcher_error exists", "passed": true, "detail": "", "priority": "P0" } ], "endpoints_tested": 26 }