游戏测试用例生成器 核心能力 将游戏需求文档(xls/csv/文本/图片)转换为标准化测试用例,支持两种生成模式: - 完整模式 :含前置条件、详细步骤、预期结果的规范用例 - 快速模式 :简洁的测试点列表,适合快速评审 输出格式:Markdown(可导入Xmind)或 Excel 使用流程 第一步:确认生成模式 询问用户选择模式: 第二步:解析需求材料 支持的输入格式 : - xls/xlsx/csv 文件 - 文本描述 - 原型图片(识别UI元素、交互流程) - 混合格式(文本+图片) 解析策略 : 1. 结构化文档 (xls/csv): - 识别列:功能模块、需求描述、UI说明、验收标准等 - 提取关键信息:玩法流程、数值配置、交互逻辑 2. 文本描述 : - 拆解功能模块(如登录、战斗、社交、付费) - 提取核心玩法(如抽卡、副本、任务系统) - 识别交互点(按钮点击、手势操作、弹窗逻辑) 3. 原型图片 : - 识别界面元素:按钮位置、文本框、弹窗样式 - 理解流程逻辑:任务引导、页面跳转、状态变化 输出需求映射表 : 第三步:生成测试用例 完整模式流程 1. 模块分类 按游戏功能模块组织: - 账号系统(登录/注册/账号安全) - 核心玩法(战斗/养成/社交) - 系统功能(商城/背包/任务) - 性能/兼容性 2. 场景覆盖原则 每个功能点至少覆盖3种场景: - 正…

\n \n match = re.search(pattern, content, re.DOTALL)\n return match.group(1).strip() if match else ''\n \n def _clean_bullets(self, text: str) -> str:\n \"\"\"清理列表项,转换为纯文本\"\"\"\n lines = text.split('\\n')\n cleaned = []\n for line in lines:\n line = line.strip()\n # 移除列表标记\n line = re.sub(r'^[-*+]\\s+\\[[ x]\\]\\s+', '', line)\n line = re.sub(r'^[-*+]\\s+', '', line)\n line = re.sub(r'^\\d+\\.\\s+', '', line)\n line = re.sub(r'^✅\\s+', '', line)\n if line:\n cleaned.append(line)\n return '\\n'.join(cleaned)\n \n def _clean_steps(self, text: str) -> str:\n \"\"\"清理操作步骤,保留序号\"\"\"\n lines = text.split('\\n')\n cleaned = []\n step_num = 1\n \n for line in lines:\n line = line.strip()\n # 跳过表格分隔线和表头\n if '|' in line and ('步骤' in line or '---' in line):\n continue\n \n # 处理表格行\n if '|' in line:\n parts = [p.strip() for p in line.split('|')]\n if len(parts) >= 3:\n step_desc = parts[2]\n test_data = parts[3] if len(parts) > 3 else ''\n if step_desc and step_desc != '操作描述':\n if test_data and test_data != '-':\n cleaned.append(f\"{step_num}. {step_desc}(测试数据:{test_data})\")\n else:\n cleaned.append(f\"{step_num}. {step_desc}\")\n step_num += 1\n elif line and not line.startswith('#'):\n cleaned.append(f\"{step_num}. {line}\")\n step_num += 1\n \n return '\\n'.join(cleaned)\n\n\ndef convert_markdown_to_excel(markdown_file: Path, output_file: Path):\n \"\"\"转换Markdown测试用例为Excel\"\"\"\n print(f\"读取文件: {markdown_file}\")\n \n with open(markdown_file, 'r', encoding='utf-8') as f:\n content = f.read()\n \n print(\"解析测试用例...\")\n parser = TestCaseParser(content)\n test_cases = parser.parse()\n \n if not test_cases:\n print(\"⚠️ 未找到测试用例,请检查Markdown格式\")\n return\n \n print(f\"找到 {len(test_cases)} 个测试用例\")\n \n # 转换为DataFrame\n df = pd.DataFrame(test_cases)\n \n # 调整列顺序\n columns = ['用例编号', '用例标题', '所属模块', '测试类型', '优先级', \n '前置条件', '操作步骤', '预期结果', '异常分支', '备注']\n df = df[columns]\n \n # 写入Excel\n print(f\"写入Excel: {output_file}\")\n with pd.ExcelWriter(output_file, engine='openpyxl') as writer:\n df.to_excel(writer, sheet_name='测试用例', index=False)\n \n # 设置列宽\n worksheet = writer.sheets['测试用例']\n worksheet.column_dimensions['A'].width = 15 # 用例编号\n worksheet.column_dimensions['B'].width = 30 # 用例标题\n worksheet.column_dimensions['C'].width = 12 # 所属模块\n worksheet.column_dimensions['D'].width = 12 # 测试类型\n worksheet.column_dimensions['E'].width = 8 # 优先级\n worksheet.column_dimensions['F'].width = 40 # 前置条件\n worksheet.column_dimensions['G'].width = 50 # 操作步骤\n worksheet.column_dimensions['H'].width = 40 # 预期结果\n worksheet.column_dimensions['I'].width = 30 # 异常分支\n worksheet.column_dimensions['J'].width = 20 # 备注\n \n print(f\"✅ 转换完成! 输出文件: {output_file}\")\n print(f\" 共导出 {len(test_cases)} 个测试用例\")\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description='将Markdown格式的测试用例转换为Excel',\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\n示例:\n python convert_to_excel.py test_cases.md -o output.xlsx\n python convert_to_excel.py test_cases.md\n \"\"\"\n )\n \n parser.add_argument('input', type=str, help='输入的Markdown文件路径')\n parser.add_argument('-o', '--output', type=str, help='输出的Excel文件路径(默认:同名.xlsx)')\n \n args = parser.parse_args()\n \n input_file = Path(args.input)\n \n if not input_file.exists():\n print(f\"❌ 错误: 文件不存在 - {input_file}\")\n return\n \n # 确定输出文件名\n if args.output:\n output_file = Path(args.output)\n else:\n output_file = input_file.with_suffix('.xlsx')\n \n # 检查依赖\n try:\n import pandas\n import openpyxl\n except ImportError:\n print(\"❌ 缺少依赖包,请先安装:\")\n print(\" pip install pandas openpyxl\")\n return\n \n convert_markdown_to_excel(input_file, output_file)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":8926,"content_sha256":"087f0cabf2edf84dde43151cad2e5a25de7f59d43b00edb912ac8be379af4c86"},{"filename":"scripts/convert_to_xmind.py","content":"#!/usr/bin/env python3\n\"\"\"\n将Markdown格式的测试用例转换为Xmind可导入的格式\n\n使用方法:\n python convert_to_xmind.py input.md -o output.md\n\n输出的Markdown采用缩进层级结构,可直接导入Xmind\n\"\"\"\n\nimport re\nimport argparse\nfrom pathlib import Path\nfrom typing import List, Dict\n\n\nclass XmindMarkdownConverter:\n \"\"\"Xmind Markdown转换器\"\"\"\n \n def __init__(self, markdown_content: str):\n self.content = markdown_content\n self.outline = []\n \n def convert(self) -> str:\n \"\"\"转换为Xmind可导入的Markdown格式\"\"\"\n lines = self.content.split('\\n')\n xmind_lines = []\n current_indent = 0\n \n for line in lines:\n # 识别标题层级\n if line.startswith('#'):\n level = len(re.match(r'^#+', line).group())\n content = line.lstrip('#').strip()\n \n # 跳过文档封面标题\n if level == 1 and any(keyword in content for keyword in ['测试用例集', '测试点清单']):\n xmind_lines.append(f\"# {content}\")\n continue\n \n # 转换为缩进格式\n indent = '\\t' * (level - 2) if level > 1 else ''\n xmind_lines.append(f\"{indent}- {content}\")\n \n # 识别列表项\n elif re.match(r'^[-*+]\\s+\\[[ x]\\]', line.strip()):\n # 任务列表\n content = re.sub(r'^[-*+]\\s+\\[[ x]\\]\\s+', '', line.strip())\n indent = '\\t' * (current_indent + 1)\n xmind_lines.append(f\"{indent}- {content}\")\n \n elif re.match(r'^[-*+]\\s+', line.strip()):\n # 普通列表\n content = re.sub(r'^[-*+]\\s+', '', line.strip())\n indent = '\\t' * (current_indent + 1)\n xmind_lines.append(f\"{indent}- {content}\")\n \n # 识别表格\n elif '|' in line and not line.strip().startswith('|---'):\n parts = [p.strip() for p in line.split('|')]\n parts = [p for p in parts if p] # 移除空元素\n \n if parts and '用例编号' not in line and '需求ID' not in line:\n # 表格数据行转换为列表\n for part in parts:\n if part and part != '-':\n indent = '\\t' * (current_indent + 1)\n xmind_lines.append(f\"{indent}- {part}\")\n \n return '\\n'.join(xmind_lines)\n \n def convert_structured(self) -> str:\n \"\"\"\n 转换为结构化的Xmind格式(适合完整用例)\n \n 结构:\n - 游戏测试用例集\n - 模块1\n - 功能1.1\n - 用例编号\n - 前置条件\n - 操作步骤\n - 预期结果\n \"\"\"\n xmind_lines = ['# 游戏测试用例集\\n']\n \n # 解析模块结构\n current_module = None\n current_function = None\n \n lines = self.content.split('\\n')\n i = 0\n while i \u003c len(lines):\n line = lines[i].strip()\n \n # 模块级别 (### 模块X:XXX)\n if re.match(r'^###\\s+模块\\d+[::]', line):\n module_name = re.sub(r'^###\\s+模块\\d+[::]\\s*', '', line)\n xmind_lines.append(f\"- {module_name}\")\n current_module = module_name\n i += 1\n continue\n \n # 功能级别 (#### 功能X.X:XXX)\n elif re.match(r'^####\\s+功能[\\d.]+[::]', line):\n function_name = re.sub(r'^####\\s+功能[\\d.]+[::]\\s*', '', line)\n xmind_lines.append(f\"\\t- {function_name}\")\n current_function = function_name\n i += 1\n continue\n \n # 用例级别 (##### 用例 XXX-XXX-X:XXX)\n elif re.match(r'^#####\\s+用例\\s+[A-Z]+-\\d{3}-[NBE][::]', line):\n case_match = re.match(r'^#####\\s+用例\\s+([A-Z]+-\\d{3}-[NBE])[::](.+)', line)\n if case_match:\n case_id = case_match.group(1)\n case_title = case_match.group(2).strip()\n xmind_lines.append(f\"\\t\\t- {case_id}:{case_title}\")\n \n # 解析用例内容\n i += 1\n case_content = self._parse_case_content(lines, i)\n for content_line in case_content:\n xmind_lines.append(f\"\\t\\t\\t{content_line}\")\n i += len(case_content)\n continue\n \n i += 1\n \n return '\\n'.join(xmind_lines)\n \n def _parse_case_content(self, lines: List[str], start_idx: int) -> List[str]:\n \"\"\"解析用例内容\"\"\"\n content_lines = []\n i = start_idx\n current_section = None\n \n while i \u003c len(lines):\n line = lines[i].strip()\n \n # 遇到下一个用例或功能,停止\n if re.match(r'^#{3,5}\\s+', line):\n break\n \n # 识别章节\n if re.match(r'\\*\\*(.+?)\\*\\*[::]', line):\n section_match = re.match(r'\\*\\*(.+?)\\*\\*[::]', line)\n current_section = section_match.group(1)\n content_lines.append(f\"- {current_section}\")\n i += 1\n continue\n \n # 列表项\n if re.match(r'^[-*+]\\s+', line):\n item = re.sub(r'^[-*+]\\s+\\[[ x]\\]\\s+', '', line)\n item = re.sub(r'^[-*+]\\s+', '', item)\n if item:\n content_lines.append(f\"\\t- {item}\")\n \n # 表格行\n elif '|' in line and not line.startswith('|---'):\n parts = [p.strip() for p in line.split('|')]\n parts = [p for p in parts if p and p != '-']\n for part in parts:\n if not any(keyword in part for keyword in ['步骤', '操作', '测试数据', '异常情况']):\n content_lines.append(f\"\\t- {part}\")\n \n i += 1\n \n return content_lines\n \n def convert_quick_testpoints(self) -> str:\n \"\"\"\n 转换快速测试点格式\n \n 结构:\n - 游戏测试点清单\n - 模块1\n - 功能点1\n - 核心测试点\n - 测试点1\n - 测试点2\n - 边界测试点\n - 异常测试点\n \"\"\"\n xmind_lines = ['# 游戏测试点清单\\n']\n \n lines = self.content.split('\\n')\n for line in lines:\n stripped = line.strip()\n \n # 模块 (## 模块:XXX)\n if re.match(r'^##\\s+模块[::]', stripped):\n module = re.sub(r'^##\\s+模块[::]\\s*', '', stripped)\n xmind_lines.append(f\"- {module}\")\n \n # 功能点 (### 功能点:XXX)\n elif re.match(r'^###\\s+功能点[::]', stripped):\n function = re.sub(r'^###\\s+功能点[::]\\s*', '', stripped)\n xmind_lines.append(f\"\\t- {function}\")\n \n # 测试点类型 (#### 🟢 核心测试点)\n elif re.match(r'^####\\s+[🟢🟡🔴⚡🔒📱🎨]', stripped):\n type_name = re.sub(r'^####\\s+[🟢🟡🔴⚡🔒📱🎨]\\s*', '', stripped)\n type_name = re.sub(r'(.+?)', '', type_name) # 移除括号说明\n xmind_lines.append(f\"\\t\\t- {type_name}\")\n \n # 测试点列表项\n elif re.match(r'^[-*+]\\s+\\[[ x]\\]', stripped):\n testpoint = re.sub(r'^[-*+]\\s+\\[[ x]\\]\\s+', '', stripped)\n xmind_lines.append(f\"\\t\\t\\t- {testpoint}\")\n \n # 待确认项 (## ❓ 待确认项)\n elif re.match(r'^##\\s+❓\\s*待确认项', stripped):\n xmind_lines.append(f\"- 待确认项\")\n \n # 待确认问题 (### 问题X:XXX)\n elif re.match(r'^###\\s+问题\\d+[::]', stripped):\n question = re.sub(r'^###\\s+问题\\d+[::]\\s*', '', stripped)\n xmind_lines.append(f\"\\t- {question}\")\n \n return '\\n'.join(xmind_lines)\n\n\ndef detect_format_type(content: str) -> str:\n \"\"\"检测Markdown格式类型\"\"\"\n if '测试点清单' in content or '核心测试点' in content:\n return 'quick'\n elif '用例编号' in content and '前置条件' in content:\n return 'full'\n else:\n return 'auto'\n\n\ndef convert_to_xmind_markdown(input_file: Path, output_file: Path, format_type: str = 'auto'):\n \"\"\"转换为Xmind可导入的Markdown\"\"\"\n print(f\"读取文件: {input_file}\")\n \n with open(input_file, 'r', encoding='utf-8') as f:\n content = f.read()\n \n # 自动检测格式\n if format_type == 'auto':\n format_type = detect_format_type(content)\n print(f\"检测到格式类型: {format_type}\")\n \n print(\"转换为Xmind格式...\")\n converter = XmindMarkdownConverter(content)\n \n if format_type == 'quick':\n xmind_content = converter.convert_quick_testpoints()\n elif format_type == 'full':\n xmind_content = converter.convert_structured()\n else:\n xmind_content = converter.convert()\n \n print(f\"写入文件: {output_file}\")\n with open(output_file, 'w', encoding='utf-8') as f:\n f.write(xmind_content)\n \n print(f\"✅ 转换完成! 输出文件: {output_file}\")\n print(f\"\\n使用说明:\")\n print(f\"1. 打开Xmind软件\")\n print(f\"2. 选择 文件 > 导入 > Markdown\")\n print(f\"3. 选择生成的文件: {output_file}\")\n\n\ndef main():\n parser = argparse.ArgumentParser(\n description='将Markdown测试用例转换为Xmind可导入格式',\n formatter_class=argparse.RawDescriptionHelpFormatter,\n epilog=\"\"\"\n格式类型:\n auto - 自动检测(默认)\n full - 完整用例格式\n quick - 快速测试点格式\n\n示例:\n python convert_to_xmind.py test_cases.md\n python convert_to_xmind.py test_cases.md -o xmind_import.md\n python convert_to_xmind.py test_cases.md -t quick\n \"\"\"\n )\n \n parser.add_argument('input', type=str, help='输入的Markdown文件路径')\n parser.add_argument('-o', '--output', type=str, help='输出文件路径(默认:原文件名_xmind.md)')\n parser.add_argument('-t', '--type', choices=['auto', 'full', 'quick'], \n default='auto', help='格式类型(默认:auto)')\n \n args = parser.parse_args()\n \n input_file = Path(args.input)\n \n if not input_file.exists():\n print(f\"❌ 错误: 文件不存在 - {input_file}\")\n return\n \n # 确定输出文件名\n if args.output:\n output_file = Path(args.output)\n else:\n output_file = input_file.parent / f\"{input_file.stem}_xmind.md\"\n \n convert_to_xmind_markdown(input_file, output_file, args.type)\n\n\nif __name__ == '__main__':\n main()\n","content_type":"text/x-python; charset=utf-8","language":"python","size":11387,"content_sha256":"bb30b3d5cf34639baa23a2ca8538f9b574fc2352a149df50df05ff9d3d17413c"},{"filename":"scripts/requirements.txt","content":"pandas>=1.5.0\nopenpyxl>=3.0.0\n","content_type":"text/plain; charset=utf-8","language":null,"size":30,"content_sha256":"75442f4cea830c11703f77c84beaca353c8c932a894d7e0be10016e18ec08cdb"},{"filename":"skill-report.json","content":"{\n \"schema_version\": \"2.0\",\n \"meta\": {\n \"generated_at\": \"2026-01-30T03:04:02.482Z\",\n \"slug\": \"snake-mustang-game-test-case-generator\",\n \"source_url\": \"https://github.com/snake-mustang/sy-testcase-generator/tree/main/\",\n \"source_ref\": \"main\",\n \"model\": \"claude\",\n \"analysis_version\": \"3.0.0\",\n \"source_type\": \"community\",\n \"content_hash\": \"4450ec385c864a7efcedfef6dabe83558939233ca8bf02d61d33317c8fe2237e\",\n \"tree_hash\": \"22e390d4d41ce761b1ac02757b07659a2cef871ba5dda9cdf389dc2a4bcd7612\"\n },\n \"skill\": {\n \"name\": \"game-test-case-generator\",\n \"description\": \"基于需求文档(xls/csv)生成专业游戏测试用例,支持完整用例和快速测试点两种模式。当用户提到\\\"游戏测试\\\"、\\\"测试用例生成\\\"、\\\"需求转测试用例\\\"、上传需求文档或原型时使用此技能。\",\n \"summary\": \"AI-powered tool that converts game requirement documents into comprehensive test cases with normal, boundary, and exception scenarios.\",\n \"icon\": \"📦\",\n \"version\": \"1.1.0\",\n \"author\": \"snake-mustang\",\n \"license\": \"MIT\",\n \"tags\": [\n \"game-testing\",\n \"test-automation\",\n \"qa-tools\",\n \"requirement-analysis\"\n ],\n \"supported_tools\": [\n \"claude\",\n \"codex\",\n \"claude-code\"\n ],\n \"risk_factors\": [\n \"external_commands\",\n \"network\",\n \"filesystem\"\n ]\n },\n \"security_audit\": {\n \"risk_level\": \"low\",\n \"is_blocked\": false,\n \"safe_to_publish\": true,\n \"summary\": \"Security review confirms all static findings are false positives. The 48 external_command detections are markdown documentation examples, not code execution. Network references are standard documentation links. Filesystem access is limited to local format conversion utilities. The skill is safe for marketplace publication.\",\n \"risk_factor_evidence\": [\n {\n \"factor\": \"external_commands\",\n \"evidence\": [\n {\n \"file\": \"README.md\",\n \"line_start\": 39,\n \"line_end\": 44\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 44,\n \"line_end\": 48\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 48,\n \"line_end\": 52\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 52,\n \"line_end\": 57\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 57,\n \"line_end\": 60\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 60,\n \"line_end\": 63\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 63,\n \"line_end\": 66\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 66,\n \"line_end\": 72\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 72,\n \"line_end\": 78\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 78,\n \"line_end\": 91\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 91,\n \"line_end\": 97\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 97,\n \"line_end\": 105\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 105,\n \"line_end\": 117\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 117,\n \"line_end\": 145\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 145,\n \"line_end\": 147\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 147,\n \"line_end\": 151\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 151,\n \"line_end\": 155\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 155,\n \"line_end\": 198\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 198,\n \"line_end\": 208\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 21,\n \"line_end\": 27\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 27,\n \"line_end\": 52\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 52,\n \"line_end\": 56\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 56,\n \"line_end\": 76\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 76,\n \"line_end\": 95\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 95,\n \"line_end\": 98\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 98,\n \"line_end\": 99\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 99,\n \"line_end\": 112\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 112,\n \"line_end\": 129\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 129,\n \"line_end\": 142\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 142,\n \"line_end\": 151\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 151,\n \"line_end\": 157\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 157,\n \"line_end\": 161\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 161,\n \"line_end\": 168\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 168,\n \"line_end\": 174\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 174,\n \"line_end\": 181\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 181,\n \"line_end\": 212\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 212,\n \"line_end\": 215\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 215,\n \"line_end\": 237\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 237,\n \"line_end\": 244\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 244,\n \"line_end\": 258\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 258,\n \"line_end\": 266\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 266,\n \"line_end\": 272\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 272,\n \"line_end\": 277\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 277,\n \"line_end\": 297\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 297,\n \"line_end\": 303\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 303,\n \"line_end\": 313\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 313,\n \"line_end\": 317\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 317,\n \"line_end\": 322\n }\n ]\n },\n {\n \"factor\": \"network\",\n \"evidence\": [\n {\n \"file\": \"README.md\",\n \"line_start\": 3,\n \"line_end\": 3\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 3,\n \"line_end\": 3\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 200,\n \"line_end\": 200\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 231,\n \"line_end\": 231\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 232,\n \"line_end\": 232\n }\n ]\n },\n {\n \"factor\": \"filesystem\",\n \"evidence\": [\n {\n \"file\": \"README.md\",\n \"line_start\": 41,\n \"line_end\": 41\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 16,\n \"line_end\": 16\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 41,\n \"line_end\": 41\n },\n {\n \"file\": \"scripts/convert_to_xmind.py\",\n \"line_start\": 258,\n \"line_end\": 258\n }\n ]\n }\n ],\n \"critical_findings\": [\n {\n \"title\": \"Prompt Injection Attempt Detected\",\n \"description\": \"Critical heuristic flagged dangerous combination of code execution, network, and credential access. Evaluation: This is a false positive. The skill contains documentation showing command examples (markdown code blocks) and documentation links. No actual code execution, network requests, or credential access occurs. The skill is a test case generator with no runtime network or credential functionality.\",\n \"locations\": [],\n \"verdict\": \"FALSE_POSITIVE\",\n \"confidence\": 0.98,\n \"confidence_reasoning\": \"All 48 external_command detections are markdown documentation examples showing command syntax. Network detections are standard documentation URLs. Filesystem access is limited to local file read/write for format conversion.\"\n }\n ],\n \"high_findings\": [],\n \"medium_findings\": [\n {\n \"title\": \"Ruby/Shell Backtick Execution Documentation\",\n \"description\": \"Pattern detected at multiple locations in README.md and SKILL.md. These are markdown documentation examples showing command syntax for format conversion scripts, not actual code execution.\",\n \"locations\": [\n {\n \"file\": \"README.md\",\n \"line_start\": 39,\n \"line_end\": 44\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 21,\n \"line_end\": 27\n }\n ],\n \"verdict\": \"FALSE_POSITIVE\",\n \"confidence\": 0.95,\n \"confidence_reasoning\": \"Backticks in markdown denote code formatting for documentation, not shell execution. Commands like `python scripts/convert_to_excel.py` are example usage instructions.\"\n },\n {\n \"title\": \"Hidden File Access Reference\",\n \"description\": \"Documentation references to ~/.cursor/skills/ directory. This is standard cursor skill installation documentation, not hidden file exploitation.\",\n \"locations\": [\n {\n \"file\": \"README.md\",\n \"line_start\": 41,\n \"line_end\": 41\n }\n ],\n \"verdict\": \"FALSE_POSITIVE\",\n \"confidence\": 0.95,\n \"confidence_reasoning\": \"The ~/.cursor/skills/ path is the standard installation location for Cursor editor skills, documented for user installation purposes.\"\n }\n ],\n \"low_findings\": [\n {\n \"title\": \"Hardcoded URLs in Documentation\",\n \"description\": \"URLs detected in README.md for badges and documentation links. These are standard markdown image and link references.\",\n \"locations\": [\n {\n \"file\": \"README.md\",\n \"line_start\": 3,\n \"line_end\": 3\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 200,\n \"line_end\": 200\n },\n {\n \"file\": \"README.md\",\n \"line_start\": 231,\n \"line_end\": 232\n }\n ],\n \"verdict\": \"FALSE_POSITIVE\",\n \"confidence\": 0.95,\n \"confidence_reasoning\": \"URLs are license badges and documentation links. No sensitive data transmission occurs.\"\n },\n {\n \"title\": \"System Reconnaissance in Test Documents\",\n \"description\": \"Example test documents contain test scenarios for network disconnection and system states. These are legitimate test cases, not reconnaissance.\",\n \"locations\": [\n {\n \"file\": \"examples/demo_test_cases.md\",\n \"line_start\": 59,\n \"line_end\": 59\n },\n {\n \"file\": \"examples/探宝轮盘测试用例.md\",\n \"line_start\": 157,\n \"line_end\": 157\n }\n ],\n \"verdict\": \"FALSE_POSITIVE\",\n \"confidence\": 0.95,\n \"confidence_reasoning\": \"Test documents describing scenarios like network disconnection are standard test case content for testing game behavior under abnormal conditions.\"\n },\n {\n \"title\": \"High File Entropy\",\n \"description\": \"Markdown files show elevated entropy scores (6.25-7.33 bits). This is normal for files containing Chinese Unicode text and mixed content.\",\n \"locations\": [\n {\n \"file\": \"README.md\",\n \"line_start\": 1,\n \"line_end\": 1\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 1,\n \"line_end\": 1\n },\n {\n \"file\": \"templates/full-template.md\",\n \"line_start\": 1,\n \"line_end\": 1\n }\n ],\n \"verdict\": \"FALSE_POSITIVE\",\n \"confidence\": 0.9,\n \"confidence_reasoning\": \"Chinese Unicode characters and mixed content naturally increase file entropy. Files are standard markdown documentation.\"\n }\n ],\n \"dangerous_patterns\": [],\n \"files_scanned\": 11,\n \"total_lines\": 1983,\n \"audit_model\": \"claude\",\n \"audited_at\": \"2026-01-30T03:04:02.482Z\",\n \"risk_factors\": [\n \"scripts\",\n \"network\",\n \"filesystem\",\n \"env_access\",\n \"external_commands\"\n ]\n },\n \"content\": {\n \"user_title\": \"Generate Game Test Cases in Minutes\",\n \"value_statement\": \"Game testing requires significant time to manually write comprehensive test cases from requirements. This skill uses AI to automatically generate professional test cases with normal, boundary, and exception scenarios, reducing test creation from 1 day to 10 minutes.\",\n \"seo_keywords\": [\n \"game testing\",\n \"test case generator\",\n \"game QA\",\n \"automated testing\",\n \"requirement to test cases\",\n \"software testing\",\n \"Claude\",\n \"Codex\",\n \"Claude Code\",\n \"game development\"\n ],\n \"actual_capabilities\": [\n \"Parse requirement documents in xls, xlsx, csv, text, and image formats\",\n \"Generate comprehensive test cases with normal, boundary, and exception scenarios\",\n \"Produce two output formats: full test cases with steps and results, or quick test point checklists\",\n \"Convert test case output to Excel or Xmind formats\",\n \"Identify ambiguous requirements and recommend solutions\",\n \"Organize test cases by game functional modules with priority classification\"\n ],\n \"limitations\": [\n \"Cannot test actual game behavior or perform manual testing on devices\",\n \"Quality depends on completeness of user-provided requirement documents\",\n \"Requires AI model support for test case generation\",\n \"Highly specialized game mechanics may need additional manual review\"\n ],\n \"use_cases\": [\n {\n \"title\": \"QA Engineer Creates Test Documentation\",\n \"description\": \"Upload a game requirement document and receive a complete test case suite organized by functional modules with scenarios covering normal flow, boundary values, and error conditions.\",\n \"target_user\": \"QA engineers and test leads\"\n },\n {\n \"title\": \"Game Designer Reviews Requirements\",\n \"description\": \"Use quick mode to generate test point lists for rapid requirement review meetings. Identify missing or ambiguous requirements before development begins.\",\n \"target_user\": \"Game designers and product managers\"\n },\n {\n \"title\": \"Project Manager Tracks Coverage\",\n \"description\": \"Generate requirement-to-test-case mapping tables and coverage statistics to verify all requirements have corresponding test cases before development starts.\",\n \"target_user\": \"Project managers and team leads\"\n }\n ],\n \"prompt_templates\": [\n {\n \"title\": \"Full Test Case Generation\",\n \"prompt\": \"Generate comprehensive test cases for this game requirement document. Use full mode with detailed steps, preconditions, and expected results. Organize by functional modules. Cover normal flow, boundary conditions, and exception handling for each feature.\",\n \"scenario\": \"When user provides requirement document and wants complete test cases\"\n },\n {\n \"title\": \"Quick Test Points\",\n \"prompt\": \"Generate a quick test point checklist for this game feature. List test points with verification criteria only. Group by normal, boundary, and exception scenarios.\",\n \"description\": \"Generate a quick test point checklist for this game feature. List test points with verification criteria only. Group by normal, boundary, and exception scenarios.\",\n \"scenario\": \"When user needs quick test points for review meetings\"\n },\n {\n \"title\": \"Specific Module Test Cases\",\n \"prompt\": \"Focus on the [MODULE_NAME] module from this requirement document. Generate complete test cases covering all scenarios. Identify any ambiguous requirements and suggest solutions.\",\n \"description\": \"Focus on the [MODULE_NAME] module from this requirement document. Generate complete test cases covering all scenarios. Identify any ambiguous requirements and suggest solutions.\",\n \"scenario\": \"When user wants test cases for a specific game module\"\n },\n {\n \"title\": \"Requirement Gap Analysis\",\n \"prompt\": \"Analyze this requirement document and identify any missing information, ambiguous descriptions, or conflicts. List all requirements and flag items that need clarification. Recommend solutions for each gap.\",\n \"description\": \"Analyze this requirement document and identify any missing information, ambiguous descriptions, or conflicts. List all requirements and flag items that need clarification. Recommend solutions for each gap.\",\n \"scenario\": \"When user wants to review requirement quality\"\n }\n ],\n \"output_examples\": [\n {\n \"input\": \"Login feature requirements: 6-20 character username, 8-32 character password, 5 failed attempts lock account for 30 minutes, 2 second max response time\",\n \"output\": [\n \"## 用例 LOG-001-N: 正常登录流程\",\n \"**测试类型**: 功能 | **优先级**: 高\",\n \"**前置条件**: 用户已注册,账号未锁定\",\n \"**操作步骤**: 1. 打开游戏登录界面 2. 输入正确账号 3. 输入正确密码 4. 点击登录按钮\",\n \"**预期结果**: 登录成功,进入游戏主界面,响应时间 ≤ 2秒\"\n ]\n },\n {\n \"input\": \"Game gacha system: 1% SSR rate, 10-pull guarantees SSR, pity counter resets after SSR\",\n \"output\": [\n \"## 用例 GACHA-001-N: 单抽获得SSR\",\n \"**测试类型**: 功能 | **优先级**: 高\",\n \"**前置条件**: 玩家拥有足够抽卡货币\",\n \"**操作步骤**: 1. 进入抽卡界面 2. 进行单抽操作\",\n \"**预期结果**: 随机获得角色/道具,SSR概率约1%\",\n \"## 用例 GACHA-010-B: 边界测试 - 99次未出SSR\",\n \"**测试类型**: 边界 | **优先级**: 高\",\n \"**前置条件**: 玩家抽卡99次未获得SSR,保底计数器=99\",\n \"**操作步骤**: 1. 进行第100次抽卡\",\n \"**预期结果**: 100%获得SSR,保底计数器重置为0\"\n ]\n }\n ],\n \"best_practices\": [\n \"Provide complete requirement documents with functional descriptions, UI specifications, and acceptance criteria for best results\",\n \"Use full mode for formal test documentation and quick mode for review meetings and rapid iteration\",\n \"Review and validate AI-generated test cases, especially for complex game mechanics\",\n \"Export to Excel for test management systems or Xmind for visual review and team discussion\"\n ],\n \"anti_patterns\": [\n \"Do not use the skill without providing any requirement document context\",\n \"Do not expect the skill to actually run tests in a game environment\",\n \"Do not skip manual review of generated test cases, especially for security-critical features\",\n \"Do not rely solely on generated test cases for compliance or regulatory testing requirements\"\n ],\n \"faq\": [\n {\n \"question\": \"What input formats does this skill support?\",\n \"answer\": \"The skill accepts xls, xlsx, csv files, plain text descriptions, and prototype images. For best results, include functional descriptions, UI specifications, and acceptance criteria.\"\n },\n {\n \"question\": \"What is the difference between full mode and quick mode?\",\n \"answer\": \"Full mode generates complete test cases with preconditions, numbered steps, expected results, and exception branches. Quick mode produces concise test point checklists suitable for review meetings.\"\n },\n {\n \"question\": \"Can I customize the test case output format?\",\n \"answer\": \"Yes. The skill outputs markdown by default. You can use the included Python scripts to convert to Excel (.xlsx) or Xmind-compatible markdown formats.\"\n },\n {\n \"question\": \"How are test case priorities determined?\",\n \"answer\": \"Priorities are assigned based on feature criticality: core gameplay and account security get high priority, common features get medium, and edge cases get low.\"\n },\n {\n \"question\": \"Does the skill handle multi-module scenarios?\",\n \"answer\": \"Yes. The skill identifies cross-module interactions and generates dedicated test cases for module-to-module scenarios such as login to character selection.\"\n },\n {\n \"question\": \"Can I use this for non-game software testing?\",\n \"answer\": \"The skill is optimized for game development with gaming-specific terminology and modules. It can be adapted for general software testing with manual adjustments.\"\n }\n ]\n },\n \"file_structure\": [\n {\n \"name\": \"examples\",\n \"type\": \"dir\",\n \"path\": \"examples\",\n \"children\": [\n {\n \"name\": \"demo_test_cases.md\",\n \"type\": \"file\",\n \"path\": \"examples/demo_test_cases.md\",\n \"lines\": 136\n },\n {\n \"name\": \"探宝轮盘测试用例.md\",\n \"type\": \"file\",\n \"path\": \"examples/探宝轮盘测试用例.md\",\n \"lines\": 279\n }\n ]\n },\n {\n \"name\": \"scripts\",\n \"type\": \"dir\",\n \"path\": \"scripts\",\n \"children\": [\n {\n \"name\": \"convert_to_excel.py\",\n \"type\": \"file\",\n \"path\": \"scripts/convert_to_excel.py\",\n \"lines\": 250\n },\n {\n \"name\": \"convert_to_xmind.py\",\n \"type\": \"file\",\n \"path\": \"scripts/convert_to_xmind.py\",\n \"lines\": 309\n },\n {\n \"name\": \"requirements.txt\",\n \"type\": \"file\",\n \"path\": \"scripts/requirements.txt\",\n \"lines\": 3\n }\n ]\n },\n {\n \"name\": \"templates\",\n \"type\": \"dir\",\n \"path\": \"templates\",\n \"children\": [\n {\n \"name\": \"full-template.md\",\n \"type\": \"file\",\n \"path\": \"templates/full-template.md\",\n \"lines\": 170\n },\n {\n \"name\": \"quick-template.md\",\n \"type\": \"file\",\n \"path\": \"templates/quick-template.md\",\n \"lines\": 174\n }\n ]\n },\n {\n \"name\": \"LICENSE\",\n \"type\": \"file\",\n \"path\": \"LICENSE\",\n \"lines\": 22\n },\n {\n \"name\": \"README.md\",\n \"type\": \"file\",\n \"path\": \"README.md\",\n \"lines\": 240\n },\n {\n \"name\": \"SKILL.md\",\n \"type\": \"file\",\n \"path\": \"SKILL.md\",\n \"lines\": 347\n }\n ]\n}\n","content_type":"application/json; charset=utf-8","language":"json","size":24170,"content_sha256":"63b4b942822de4ba4a7617bfb40c053a312eee3d545403ee8ff844534f195a4f"},{"filename":"templates/full-template.md","content":"# 完整测试用例模板\n\n## 用例基本信息\n\n**用例编号**:[模块缩写]-[功能编号]-[场景类型]\n- 示例:LOG-001-N(登录模块-功能001-正常场景)\n- 场景类型:N(正常) / B(边界) / E(异常)\n\n**用例标题**:[简洁描述测试目的]\n\n**所属模块**:[功能模块名称]\n\n**测试类型**:\n- [ ] 功能测试\n- [ ] 性能测试\n- [ ] 兼容性测试\n- [ ] 安全测试\n\n**优先级**:\n- [ ] 高(核心流程、付费环节、账号安全)\n- [ ] 中(常用功能、次要玩法)\n- [ ] 低(优化功能、边缘场景)\n\n**自动化程度**:\n- [ ] 🤖 可自动化\n- [ ] ⚠️ 半自动化\n- [ ] 👤 纯手工\n\n---\n\n## 前置条件\n\n> 列出执行此用例前必须满足的条件\n\n- [ ] 条件1:[具体描述]\n- [ ] 条件2:[具体描述]\n- [ ] 条件3:[具体描述]\n\n**示例**:\n- [ ] 用户已注册有效账号\n- [ ] 客户端版本为 v2.1.0\n- [ ] 设备网络连接正常\n\n---\n\n## 操作步骤\n\n> 每步操作需具体到按钮名称、输入内容、操作位置\n\n| 步骤 | 操作描述 | 测试数据 |\n|------|---------|----------|\n| 1 | [具体操作] | [使用的测试数据] |\n| 2 | [具体操作] | [使用的测试数据] |\n| 3 | [具体操作] | [使用的测试数据] |\n\n**示例**:\n| 步骤 | 操作描述 | 测试数据 |\n|------|---------|----------|\n| 1 | 打开游戏登录页面 | - |\n| 2 | 在\"账号\"输入框输入账号 | test_user_001 |\n| 3 | 在\"密码\"输入框输入密码 | Pass@1234 |\n| 4 | 点击\"立即登录\"按钮 | - |\n\n---\n\n## 预期结果\n\n> 明确、可量化、可验证的结果描述\n\n**主要结果**:\n- ✅ [关键验证点1]\n- ✅ [关键验证点2]\n- ✅ [关键验证点3]\n\n**详细验证**:\n1. [验证项1的详细标准]\n2. [验证项2的详细标准]\n3. [验证项3的详细标准]\n\n**示例**:\n**主要结果**:\n- ✅ 登录成功,跳转至游戏主界面\n- ✅ 主界面显示用户昵称\"测试用户001\"\n- ✅ 无任何错误提示弹窗\n\n**详细验证**:\n1. 页面跳转时间 ≤ 2秒\n2. 主界面左上角显示用户头像和等级\n3. 服务器记录本次登录时间和IP地址\n\n---\n\n## 异常分支\n\n> 列出可能出现的异常情况及预期处理方式\n\n| 异常情况 | 预期处理 | 备注 |\n|---------|---------|------|\n| [异常描述1] | [系统应如何响应] | [补充说明] |\n| [异常描述2] | [系统应如何响应] | [补充说明] |\n\n**示例**:\n| 异常情况 | 预期处理 | 备注 |\n|---------|---------|------|\n| 网络连接中断 | 提示\"网络连接失败,请检查网络\",停留在登录页 | 需重新点击登录 |\n| 服务器维护中 | 提示\"服务器维护中,预计XX:XX开放\",禁用登录按钮 | 显示维护倒计时 |\n| 账号已在其他设备登录 | 提示\"账号已在其他设备登录,是否强制登录?\" | 确认后踢出原设备 |\n\n---\n\n## 测试数据\n\n> 如涉及多组测试数据,列出详细表格\n\n| 数据组 | 字段1 | 字段2 | 字段3 | 预期结果 |\n|--------|------|------|------|---------|\n| 数据1 | [值] | [值] | [值] | [结果] |\n| 数据2 | [值] | [值] | [值] | [结果] |\n\n**示例(边界测试)**:\n| 数据组 | 账号长度 | 密码长度 | 特殊字符 | 预期结果 |\n|--------|----------|----------|----------|---------|\n| 最小值 | 6位 | 8位 | 无 | 登录成功 |\n| 最大值 | 20位 | 32位 | 含@#$% | 登录成功 |\n| 超限值 | 21位 | 33位 | 无 | 提示\"账号或密码长度超限\" |\n\n---\n\n## 关联用例\n\n> 列出相关的前置用例、后续用例或互斥用例\n\n- **前置用例**:[用例编号] - [用例名称]\n- **后续用例**:[用例编号] - [用例名称]\n- **互斥用例**:[用例编号] - [用例名称]\n\n**示例**:\n- **前置用例**:REG-001-N - 用户注册成功\n- **后续用例**:MAIN-001-N - 主界面功能验证\n- **互斥用例**:LOG-002-E - 账号被封禁无法登录\n\n---\n\n## 备注\n\n> 补充说明、特殊注意事项\n\n- [备注1]\n- [备注2]\n\n**示例**:\n- 本用例涉及跨服登录,需准备多服务器环境\n- iOS和Android登录流程一致,但UI样式略有差异\n- 测试账号需每日重置密码错误次数\n\n---\n\n## 执行记录(实际测试时填写)\n\n**测试人员**:________________\n**测试时间**:________________\n**测试环境**:________________\n**执行结果**:\n- [ ] ✅ 通过\n- [ ] ❌ 失败\n- [ ] ⚠️ 阻塞\n\n**缺陷编号**(如失败):________________\n**备注**:________________________________\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4477,"content_sha256":"fcdbb49048673c29066546d000175612594217218ffd8e5b1fc10336ab7d4211"},{"filename":"templates/quick-template.md","content":"# 快速测试点模板\n\n> 用于快速评审和测试点提炼,无需详细步骤描述\n\n---\n\n## 模块:[功能模块名称]\n\n### 功能点:[具体功能名称]\n\n#### 🟢 核心测试点(正常场景)\n> 标准流程的测试点,必须验证\n\n- [ ] 测试点1描述 + 验证标准\n- [ ] 测试点2描述 + 验证标准\n- [ ] 测试点3描述 + 验证标准\n\n**示例**:\n- [ ] 输入正确账号密码,点击登录按钮,成功跳转至主界面(2秒内)\n- [ ] 主界面显示用户昵称、等级、头像信息\n- [ ] 登录后背景音乐自动播放\n\n---\n\n#### 🟡 边界测试点\n> 极限值、临界值测试\n\n- [ ] 边界点1描述 + 验证标准\n- [ ] 边界点2描述 + 验证标准\n\n**示例**:\n- [ ] 账号输入6位(最小长度),能够正常登录\n- [ ] 账号输入20位(最大长度),能够正常登录\n- [ ] 账号输入21位(超限),提示\"账号长度不能超过20位\"\n- [ ] 密码输入32位(最大长度),能够正常登录\n\n---\n\n#### 🔴 异常测试点\n> 错误处理、容错能力\n\n- [ ] 异常点1描述 + 预期处理方式\n- [ ] 异常点2描述 + 预期处理方式\n\n**示例**:\n- [ ] 输入不存在的账号,提示\"账号或密码错误\"\n- [ ] 输入错误密码,提示\"账号或密码错误\",记录错误次数\n- [ ] 连续5次密码错误,账号锁定30分钟,提示\"账号已锁定\"\n- [ ] 登录过程中断网,提示\"网络连接失败,请检查网络\"\n- [ ] 服务器维护中,提示\"服务器维护中,预计XX:XX开放\"\n\n---\n\n#### ⚡ 性能测试点(如适用)\n> 响应时间、并发、资源占用\n\n- [ ] 性能点1描述 + 性能指标\n- [ ] 性能点2描述 + 性能指标\n\n**示例**:\n- [ ] 登录响应时间 ≤ 2秒(正常网络环境)\n- [ ] 100人同时登录,服务器响应时间 ≤ 3秒\n- [ ] 登录过程客户端内存占用 ≤ 256MB\n\n---\n\n#### 🔒 安全测试点(如适用)\n> 数据安全、权限控制\n\n- [ ] 安全点1描述 + 安全标准\n- [ ] 安全点2描述 + 安全标准\n\n**示例**:\n- [ ] 密码输入框内容显示为圆点(密文)\n- [ ] 网络传输密码采用加密(非明文)\n- [ ] 登录成功后生成session token,有效期24小时\n- [ ] 防SQL注入:输入恶意SQL语句不影响系统\n\n---\n\n#### 📱 兼容性测试点(如适用)\n> 平台、设备、系统版本兼容\n\n- [ ] 兼容点1描述\n- [ ] 兼容点2描述\n\n**示例**:\n- [ ] iOS 14/15/16 系统登录功能正常\n- [ ] Android 10/11/12 系统登录功能正常\n- [ ] iPhone 8 至 iPhone 15 机型UI显示正常\n- [ ] 主流Android机型(华为/小米/OPPO)登录正常\n\n---\n\n#### 🎨 UI测试点(基于原型图)\n> 界面显示、交互效果\n\n- [ ] UI元素1的位置、样式、内容\n- [ ] UI元素2的位置、样式、内容\n\n**示例**:\n- [ ] \"立即登录\"按钮位于屏幕下方居中,蓝色背景白色文字\n- [ ] 账号输入框显示占位提示\"请输入账号\",字体灰色\n- [ ] 密码输入框右侧有\"眼睛\"图标,点击切换明文/密文\n- [ ] 忘记密码链接位于密码框右下方,蓝色字体12px\n\n---\n\n## ❓ 待确认项\n\n> 标记需求中的模糊点、矛盾点、缺失点\n\n### 问题1:[问题描述]\n- **当前状态**:[需求中如何描述或未描述]\n- **影响范围**:[影响哪些测试点]\n- **推荐方案**:[建议的处理方式]\n- **备选方案**:[其他可选方案]\n\n**示例**:\n\n### 问题1:是否支持第三方登录\n- **当前状态**:需求文档未明确说明\n- **影响范围**:影响登录模块测试点覆盖度\n- **推荐方案**:支持微信/QQ第三方登录(符合行业惯例)\n- **备选方案**:仅支持账号密码登录(快速上线)\n\n### 问题2:账号锁定时长未明确\n- **当前状态**:需求提到\"连续错误锁定账号\"但未说明时长\n- **影响范围**:异常测试点的验证标准\n- **推荐方案**:锁定30分钟(常见做法)\n- **备选方案**:锁定60分钟或需联系客服解锁\n\n---\n\n## 📊 测试点统计\n\n- **核心测试点**:X 个\n- **边界测试点**:X 个\n- **异常测试点**:X 个\n- **性能测试点**:X 个\n- **安全测试点**:X 个\n- **兼容性测试点**:X 个\n- **UI测试点**:X 个\n- **待确认项**:X 个\n\n**总计**:X 个测试点\n\n---\n\n## 📝 备注\n\n- [补充说明1]\n- [补充说明2]\n\n**示例**:\n- 本模块涉及支付流程,需准备测试支付环境\n- iOS和Android测试点相同,但UI适配需分别验证\n- 测试账号需提前准备10个不同等级/状态的账号\n\n---\n\n## 🔗 相关模块\n\n> 列出与本模块关联的其他模块\n\n- **前置模块**:[模块名称] - [关联说明]\n- **后续模块**:[模块名称] - [关联说明]\n- **关联模块**:[模块名称] - [关联说明]\n\n**示例**:\n- **前置模块**:用户注册 - 需先注册才能登录\n- **后续模块**:游戏主界面 - 登录后进入主界面\n- **关联模块**:账号安全 - 涉及密码修改、账号找回等功能\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":4988,"content_sha256":"b490b1fa4104b636e41c1977bc9d36c66ed81f1e5c73a7e0e80cabee658a4223"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"游戏测试用例生成器","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"核心能力","type":"text"}]},{"type":"paragraph","content":[{"text":"将游戏需求文档(xls/csv/文本/图片)转换为标准化测试用例,支持两种生成模式:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"完整模式","type":"text","marks":[{"type":"strong"}]},{"text":":含前置条件、详细步骤、预期结果的规范用例","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"快速模式","type":"text","marks":[{"type":"strong"}]},{"text":":简洁的测试点列表,适合快速评审","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"输出格式:Markdown(可导入Xmind)或 Excel","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"使用流程","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第一步:确认生成模式","type":"text"}]},{"type":"paragraph","content":[{"text":"询问用户选择模式:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"请选择测试用例生成模式:\n1. 完整模式 - 生成规范的测试用例集(含编号、前置条件、操作步骤、预期结果)\n2. 快速模式 - 仅生成测试点列表(快速评审用)\n\n默认:完整模式","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第二步:解析需求材料","type":"text"}]},{"type":"paragraph","content":[{"text":"支持的输入格式","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"xls/xlsx/csv 文件","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"文本描述","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"原型图片(识别UI元素、交互流程)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"混合格式(文本+图片)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"解析策略","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"结构化文档","type":"text","marks":[{"type":"strong"}]},{"text":"(xls/csv):","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"识别列:功能模块、需求描述、UI说明、验收标准等","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"提取关键信息:玩法流程、数值配置、交互逻辑","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"文本描述","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"拆解功能模块(如登录、战斗、社交、付费)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"提取核心玩法(如抽卡、副本、任务系统)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"识别交互点(按钮点击、手势操作、弹窗逻辑)","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"原型图片","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"识别界面元素:按钮位置、文本框、弹窗样式","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"理解流程逻辑:任务引导、页面跳转、状态变化","type":"text"}]}]}]}]}]},{"type":"paragraph","content":[{"text":"输出需求映射表","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"| 需求ID | 需求描述 | 来源 | 测试点数量 | 备注 |\n|--------|----------|------|-----------|------|\n| REQ-001 | 用户登录 | 需求文档第3行 | 8 | 含第三方登录 |","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第三步:生成测试用例","type":"text"}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"完整模式流程","type":"text"}]},{"type":"paragraph","content":[{"text":"1. 模块分类","type":"text","marks":[{"type":"strong"}]},{"text":" 按游戏功能模块组织:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"账号系统(登录/注册/账号安全)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"核心玩法(战斗/养成/社交)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"系统功能(商城/背包/任务)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"性能/兼容性","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"2. 场景覆盖原则","type":"text","marks":[{"type":"strong"}]},{"text":" 每个功能点至少覆盖3种场景:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"正常场景","type":"text","marks":[{"type":"strong"}]},{"text":":标准流程执行","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"边界场景","type":"text","marks":[{"type":"strong"}]},{"text":":极限值测试(等级上限、道具数量最大值、长字符输入)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"异常场景","type":"text","marks":[{"type":"strong"}]},{"text":":错误处理(断网、非法输入、并发操作)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"3. 用例结构","type":"text","marks":[{"type":"strong"}]},{"text":"(使用模板:templates/full-template.md)","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## 用例编号:模块-功能编号-场景类型\n\n**测试类型**:功能/性能/兼容性/安全\n**优先级**:高/中/低\n**前置条件**:\n- 条件1\n- 条件2\n\n**操作步骤**:\n1. 具体操作(精确到\"点击XX按钮\")\n2. 具体操作(精确到\"输入XX内容\")\n\n**预期结果**:\n- 可量化的验证点\n- 无歧义的判断标准\n\n**异常分支**:\n- 异常情况描述及预期处理","type":"text"}]},{"type":"paragraph","content":[{"text":"4. 用例编号规则","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"格式:","type":"text"},{"text":"模块缩写-功能编号-场景类型","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"示例:","type":"text"},{"text":"LOG-001-N","type":"text","marks":[{"type":"code_inline"}]},{"text":"(登录模块-第1个功能-正常场景)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"场景类型:N(正常)/B(边界)/E(异常)","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"5. 优先级定义","type":"text","marks":[{"type":"strong"}]}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"高","type":"text","marks":[{"type":"strong"}]},{"text":":核心流程、付费环节、账号安全","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"中","type":"text","marks":[{"type":"strong"}]},{"text":":常用功能、次要玩法","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"低","type":"text","marks":[{"type":"strong"}]},{"text":":优化功能、边缘场景","type":"text"}]}]}]},{"type":"heading","attrs":{"level":4},"content":[{"text":"快速模式流程","type":"text"}]},{"type":"paragraph","content":[{"text":"使用模板","type":"text","marks":[{"type":"strong"}]},{"text":":templates/quick-template.md","type":"text"}]},{"type":"paragraph","content":[{"text":"输出结构","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"# 模块名称\n\n## 核心测试点\n- [ ] 测试点描述(含验证标准)\n- [ ] 测试点描述(含验证标准)\n\n## 边界场景\n- [ ] 测试点描述\n- [ ] 测试点描述\n\n## 异常场景\n- [ ] 测试点描述\n- [ ] 测试点描述\n\n## 待确认项\n- ❓ 模糊需求描述 → 推荐方案","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第四步:质量检查","type":"text"}]},{"type":"paragraph","content":[{"text":"必检项","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"checkbox_list","attrs":{"id":null},"content":[{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"需求覆盖度:所有需求点都有对应用例","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"场景完整性:正常/边界/异常三类场景齐全","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"表述清晰度:无\"可能\"、\"大概\"等模糊词","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"可执行性:步骤具体、结果可验证","type":"text"}]}]},{"type":"checkbox_item","attrs":{"checked":false},"content":[{"type":"paragraph","content":[{"text":"跨模块联动:涉及多模块的场景已覆盖","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"待确认项处理","type":"text","marks":[{"type":"strong"}]},{"text":": 对模糊/冲突/缺失需求标注:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## 待确认项\n\n### 问题1:登录方式未明确\n**描述**:需求未说明是否支持第三方登录\n**方案A**:仅支持账号密码登录\n**方案B**:支持微信/QQ第三方登录\n**推荐**:方案B(符合行业惯例)\n**影响用例**:LOG-003、LOG-004","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"第五步:格式转换","type":"text"}]},{"type":"paragraph","content":[{"text":"Markdown输出","type":"text","marks":[{"type":"strong"}]},{"text":"(默认):","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"直接可用于文档查看","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"支持导入Xmind(脚本:","type":"text"},{"text":"scripts/convert_to_xmind.py","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"层级结构:模块 → 功能点 → 用例","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Excel输出","type":"text","marks":[{"type":"strong"}]},{"text":"(可选): 使用脚本:","type":"text"},{"text":"scripts/convert_to_excel.py","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"paragraph","content":[{"text":"Excel表结构:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"用例编号","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"模块","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"功能点","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"测试类型","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"优先级","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"前置条件","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"操作步骤","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"预期结果","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"异常分支","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"转换命令示例","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"# 转换为Excel\npython scripts/convert_to_excel.py output.md -o 测试用例集.xlsx\n\n# 转换为Xmind格式\npython scripts/convert_to_xmind.py output.md -o 测试用例.xmind","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"输出规范","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"文档结构","type":"text"}]},{"type":"paragraph","content":[{"text":"完整模式输出","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"# [游戏名称] 测试用例集\n**版本**:v1.0\n**测试模块**:XXX模块\n**生成时间**:2026-01-27\n\n## 📋 需求映射表\n[需求点 → 用例编号 → 覆盖场景]\n\n## 📦 测试用例集\n\n### 模块1:账号系统\n#### 功能1.1:用户登录\n##### 用例 LOG-001-N:正常登录流程\n[完整用例内容]\n\n##### 用例 LOG-001-B:边界测试 - 密码长度上限\n[完整用例内容]\n\n##### 用例 LOG-001-E:异常测试 - 网络中断\n[完整用例内容]\n\n## ❓ 待确认项\n[问题描述 + 方案对比 + 推荐方案]\n\n## 📊 统计信息\n- 总用例数:XX\n- 高优先级:XX\n- 中优先级:XX\n- 低优先级:XX\n- 待确认项:XX","type":"text"}]},{"type":"paragraph","content":[{"text":"快速模式输出","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"# [游戏名称] 测试点清单\n**版本**:v1.0\n**生成时间**:2026-01-27\n\n## 模块1:账号系统\n\n### 用户登录\n- [ ] 正确账号密码登录成功,进入游戏主界面\n- [ ] 错误密码提示\"密码错误\",不允许登录\n- [ ] 密码输入32位(上限)正常登录\n- [ ] 网络断开提示\"网络连接失败\"\n- [ ] 连续5次密码错误触发账号锁定\n\n### 第三方登录\n- [ ] 微信授权登录成功,自动绑定游戏账号\n- [ ] 取消微信授权返回登录页,不创建账号\n...\n\n## ❓ 待确认项\n- 登录方式是否包含手机验证码登录?\n- 账号锁定时长未明确(建议30分钟)","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"特殊场景处理","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"需求冲突","type":"text"}]},{"type":"paragraph","content":[{"text":"识别标准","type":"text","marks":[{"type":"strong"}]},{"text":":需求文档中不同章节描述矛盾 ","type":"text"},{"text":"处理方式","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## ⚠️ 需求冲突\n\n**冲突点**:用户等级上限\n- 需求第3章描述:等级上限100级\n- 原型图显示:等级上限150级\n\n**协调方案**:\n- 方案A:采用100级(文档为准)\n- 方案B:采用150级(原型为准)\n\n**推荐**:方案A,并补充说明:若后续版本提升上限,需修改UI显示范围\n\n**临时处理**:生成两套边界测试用例(100级和150级)","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"图片信息提取","type":"text"}]},{"type":"paragraph","content":[{"text":"当需求包含原型图时:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"识别UI元素","type":"text","marks":[{"type":"strong"}]},{"text":":按钮、文本框、图标的位置和样式","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"提取交互逻辑","type":"text","marks":[{"type":"strong"}]},{"text":":点击流程、页面跳转、状态变化","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"生成UI测试点","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"### UI测试点(基于原型图)\n- [ ] \"立即登录\"按钮位于屏幕下方,蓝色背景白色文字\n- [ ] 账号输入框显示提示文字\"请输入账号\",字体灰色\n- [ ] 密码输入框内容显示为圆点,支持明文/密文切换图标\n- [ ] 忘记密码链接位于密码框右侧,字体12px蓝色","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"性能指标","type":"text"}]},{"type":"paragraph","content":[{"text":"如需求涉及性能要求:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"### 性能测试用例 PERF-001-N\n**测试类型**:性能\n**优先级**:高\n\n**测试场景**:100人同时在线战斗\n**性能指标**:\n- 服务器响应时间 ≤ 200ms\n- 客户端帧率 ≥ 30fps\n- 内存占用 ≤ 512MB\n\n**测试步骤**:\n1. 启动性能监控工具\n2. 模拟100个玩家同时进入战斗场景\n3. 持续测试5分钟\n4. 记录性能数据\n\n**预期结果**:\n- 所有指标均在阈值范围内\n- 无崩溃、无卡顿","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"进阶技巧","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"用例复用","type":"text"}]},{"type":"paragraph","content":[{"text":"对于相似功能(如不同道具的使用逻辑),使用参数化:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"### 用例模板:道具使用 ITEM-USE-N\n**参数**:道具类型、使用效果、冷却时间\n\n**测试数据**:\n| 道具类型 | 使用效果 | 冷却时间 |\n|---------|---------|---------|\n| 生命药水 | 恢复50%HP | 30秒 |\n| 魔法药水 | 恢复50%MP | 30秒 |\n| 复活石 | 原地复活 | 无 |","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"自动化标识","type":"text"}]},{"type":"paragraph","content":[{"text":"对于可自动化的用例添加标签:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"**自动化程度**:🤖 可自动化 / ⚠️ 半自动化 / 👤 纯手工\n\n用例 LOG-001-N:正常登录流程 🤖\n用例 COMBAT-005-N:战斗特效表现 👤","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"注意事项","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"术语统一","type":"text","marks":[{"type":"strong"}]},{"text":":全文使用一致的术语(如\"玩家\"不混用\"用户\")","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"步骤具体","type":"text","marks":[{"type":"strong"}]},{"text":":避免\"检查功能正常\",改为\"检查HP值从100降低到50\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"禁用模糊词","type":"text","marks":[{"type":"strong"}]},{"text":":不用\"可能\"、\"大概\"、\"基本\"等词汇","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"跨模块用例","type":"text","marks":[{"type":"strong"}]},{"text":":涉及多模块交互的场景独立列出","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"版本标记","type":"text","marks":[{"type":"strong"}]},{"text":":如需求分版本迭代,标注用例所属版本","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"质量标准","type":"text"}]},{"type":"paragraph","content":[{"text":"合格标准","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ 需求覆盖率 ≥ 95%","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ 每个功能点至少3个场景(正常/边界/异常)","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ 核心流程用例优先级为\"高\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ 无模糊表述","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ 所有待确认项已标注","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"辅助资源","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"完整用例模板","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"templates/full-template.md","type":"text","marks":[{"type":"link","attrs":{"href":"templates/full-template.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"快速测试点模板","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"templates/quick-template.md","type":"text","marks":[{"type":"link","attrs":{"href":"templates/quick-template.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Excel转换脚本","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"scripts/convert_to_excel.py","type":"text","marks":[{"type":"link","attrs":{"href":"scripts/convert_to_excel.py","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Xmind转换脚本","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"},{"text":"scripts/convert_to_xmind.py","type":"text","marks":[{"type":"link","attrs":{"href":"scripts/convert_to_xmind.py","title":null}}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"game-test-case-generator","author":"@skillopedia","source":{"stars":336,"repo_name":"marketplace","origin_url":"https://github.com/aiskillstore/marketplace/blob/HEAD/skills/snake-mustang/game-test-case-generator/SKILL.md","repo_owner":"aiskillstore","body_sha256":"142cb933a87da75b7b0f4f3634af81afd04a6b01fe8c83678b960010c2c703e2","cluster_key":"9a242540e99690a915a4169d4c36c01c661cb2d3c9b00664eb0a463f4721b503","clean_bundle":{"format":"clean-skill-bundle-v1","source":"aiskillstore/marketplace/skills/snake-mustang/game-test-case-generator/SKILL.md","attachments":[{"id":"036a4f0c-2417-56b7-8b87-0995fa6f64f4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/036a4f0c-2417-56b7-8b87-0995fa6f64f4/attachment.md","path":"README.md","size":6928,"sha256":"c2cc4234666f342af0e3633721479da6d82ab749fa5ec1ebcb25851dc6f481b3","contentType":"text/markdown; charset=utf-8"},{"id":"05755076-ba44-57d2-8e7b-95035e11b9ac","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/05755076-ba44-57d2-8e7b-95035e11b9ac/attachment.md","path":"examples/demo_test_cases.md","size":6131,"sha256":"cca10247462ea8b1af8646cf0451d4a1a9e1f467768ba869bb36adc92eba58dc","contentType":"text/markdown; charset=utf-8"},{"id":"1a527a5f-4a45-5cac-b97c-166d48f12c44","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1a527a5f-4a45-5cac-b97c-166d48f12c44/attachment.md","path":"examples/探宝轮盘测试用例.md","size":12688,"sha256":"e1caee124d65e4fb9ca97fa228db69964f4dbffb09bad541df256a1a6c14c7ec","contentType":"text/markdown; charset=utf-8"},{"id":"8d0d6e8b-3055-5f54-aa2e-2434727e04e2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8d0d6e8b-3055-5f54-aa2e-2434727e04e2/attachment.py","path":"scripts/convert_to_excel.py","size":8926,"sha256":"087f0cabf2edf84dde43151cad2e5a25de7f59d43b00edb912ac8be379af4c86","contentType":"text/x-python; charset=utf-8"},{"id":"1a25cafa-0793-579a-a3d9-bf284ddddda3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1a25cafa-0793-579a-a3d9-bf284ddddda3/attachment.py","path":"scripts/convert_to_xmind.py","size":11387,"sha256":"bb30b3d5cf34639baa23a2ca8538f9b574fc2352a149df50df05ff9d3d17413c","contentType":"text/x-python; charset=utf-8"},{"id":"57b4bc83-8de4-5634-8aab-a1e97c911519","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/57b4bc83-8de4-5634-8aab-a1e97c911519/attachment.txt","path":"scripts/requirements.txt","size":30,"sha256":"75442f4cea830c11703f77c84beaca353c8c932a894d7e0be10016e18ec08cdb","contentType":"text/plain; charset=utf-8"},{"id":"0cef1b65-34ed-5786-bd7a-618a5830ad8f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0cef1b65-34ed-5786-bd7a-618a5830ad8f/attachment.json","path":"skill-report.json","size":24170,"sha256":"63b4b942822de4ba4a7617bfb40c053a312eee3d545403ee8ff844534f195a4f","contentType":"application/json; charset=utf-8"},{"id":"6d0ec09f-ad4a-5663-830f-9efad3492a00","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6d0ec09f-ad4a-5663-830f-9efad3492a00/attachment.md","path":"templates/full-template.md","size":4477,"sha256":"fcdbb49048673c29066546d000175612594217218ffd8e5b1fc10336ab7d4211","contentType":"text/markdown; charset=utf-8"},{"id":"e5055354-ad7a-5228-9267-65d1a6201038","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e5055354-ad7a-5228-9267-65d1a6201038/attachment.md","path":"templates/quick-template.md","size":4988,"sha256":"b490b1fa4104b636e41c1977bc9d36c66ed81f1e5c73a7e0e80cabee658a4223","contentType":"text/markdown; charset=utf-8"}],"bundle_sha256":"2341f817890fc85678cab60f0b2491e928701ce8edb8f7defd0e2edf7c397c01","attachment_count":9,"text_attachments":9,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/snake-mustang/game-test-case-generator/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"testing-qa","category_label":"Testing"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"testing-qa","import_tag":"clean-skills-v1","description":"基于需求文档(xls/csv)生成专业游戏测试用例,支持完整用例和快速测试点两种模式。当用户提到\"游戏测试\"、\"测试用例生成\"、\"需求转测试用例\"、上传需求文档或原型时使用此技能。"}},"renderedAt":1782987558794}

游戏测试用例生成器 核心能力 将游戏需求文档(xls/csv/文本/图片)转换为标准化测试用例,支持两种生成模式: - 完整模式 :含前置条件、详细步骤、预期结果的规范用例 - 快速模式 :简洁的测试点列表,适合快速评审 输出格式:Markdown(可导入Xmind)或 Excel 使用流程 第一步:确认生成模式 询问用户选择模式: 第二步:解析需求材料 支持的输入格式 : - xls/xlsx/csv 文件 - 文本描述 - 原型图片(识别UI元素、交互流程) - 混合格式(文本+图片) 解析策略 : 1. 结构化文档 (xls/csv): - 识别列:功能模块、需求描述、UI说明、验收标准等 - 提取关键信息:玩法流程、数值配置、交互逻辑 2. 文本描述 : - 拆解功能模块(如登录、战斗、社交、付费) - 提取核心玩法(如抽卡、副本、任务系统) - 识别交互点(按钮点击、手势操作、弹窗逻辑) 3. 原型图片 : - 识别界面元素:按钮位置、文本框、弹窗样式 - 理解流程逻辑:任务引导、页面跳转、状态变化 输出需求映射表 : 第三步:生成测试用例 完整模式流程 1. 模块分类 按游戏功能模块组织: - 账号系统(登录/注册/账号安全) - 核心玩法(战斗/养成/社交) - 系统功能(商城/背包/任务) - 性能/兼容性 2. 场景覆盖原则 每个功能点至少覆盖3种场景: - 正…