This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw/skills/dev-workflow/prompts/testing.md
T

6.8 KiB

测试阶段 Prompt 模板

目标

运行项目现有测试 + 开发生成的新测试,确保代码质量。

测试流程

┌─────────────────────────────────────────────────────────────┐
│ 测试阶段流程                                                  │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  1. 检测测试框架                                              │
│     └→ pytest / jest / go test / ...                        │
│                          ↓                                   │
│  2. 运行现有测试                                              │
│     └→ 记录结果                                               │
│                          ↓                                   │
│  3. 运行新增测试                                              │
│     └→ 记录结果                                               │
│                          ↓                                   │
│  ┌───────────────────────────────────────┐                  │
│  │ 测试结果                               │                  │
│  ├───────────────────────────────────────┤                  │
│  │ 全部通过 → 进入下一阶段                │                  │
│  │ 有失败   → 重试(最多3次)               │                  │
│  │ 超过重试 → 汇报用户                    │                  │
│  └───────────────────────────────────────┘                  │
│                                                              │
└─────────────────────────────────────────────────────────────┘

测试框架检测

def detect_test_framework(project_root: str) -> dict:
    """检测项目的测试框架"""
    
    frameworks = []
    
    # Python
    if (Path(project_root) / "pytest.ini").exists():
        frameworks.append({"name": "pytest", "command": "pytest -v", "type": "python"})
    if (Path(project_root) / "setup.py").exists():
        frameworks.append({"name": "unittest", "command": "python -m unittest", "type": "python"})
    
    # JavaScript/TypeScript
    if (Path(project_root) / "jest.config.js").exists():
        frameworks.append({"name": "jest", "command": "npm test", "type": "javascript"})
    if (Path(project_root) / "vitest.config.ts").exists():
        frameworks.append({"name": "vitest", "command": "npx vitest run", "type": "javascript"})
    
    # Go
    if (Path(project_root) / "go.mod").exists():
        frameworks.append({"name": "go test", "command": "go test ./...", "type": "go"})
    
    return frameworks

测试执行 Prompt

你是一个测试工程师。请执行以下测试任务。

## 项目信息
- 项目路径: {project_root}
- 测试框架: {test_framework}

## 任务

1. 运行所有现有测试
2. 运行本次开发新增的测试
3. 记录测试结果
4. 分析失败原因(如果有)

## 输出格式

```markdown
# 测试报告

## 测试环境
- 框架: {framework}
- 命令: {command}
- 执行时间: {timestamp}

## 测试结果摘要

| 类型 | 总数 | 通过 | 失败 | 跳过 |
|------|------|------|------|------|
| 现有测试 | {total} | {passed} | {failed} | {skipped} |
| 新增测试 | {total} | {passed} | {failed} | {skipped} |

## 失败详情

### 失败测试 1: {test_name}

{error_message}


**可能原因**: {analysis}

## 结论
- [ ] 全部通过
- [ ] 有失败需要修复

## 建议
{recommendations}

请执行测试并生成报告。


## 测试结果解析

```python
def parse_test_results(output: str, framework: str) -> dict:
    """解析测试结果"""
    
    if framework == "pytest":
        # 解析 pytest 输出
        import re
        match = re.search(r"(\d+) passed, (\d+) failed", output)
        if match:
            return {
                "passed": int(match.group(1)),
                "failed": int(match.group(2))
            }
    
    elif framework == "jest":
        # 解析 jest 输出
        import re
        match = re.search(r"(\d+) passed, (\d+) failed", output)
        if match:
            return {
                "passed": int(match.group(1)),
                "failed": int(match.group(2))
            }
    
    return {"passed": 0, "failed": 0, "raw_output": output}

重试逻辑

def run_tests_with_retry(max_retries: int = 3) -> dict:
    """带重试的测试执行"""
    
    for attempt in range(1, max_retries + 1):
        print(f"\n尝试 {attempt}/{max_retries}...")
        
        result = run_tests()
        
        if result["failed"] == 0:
            print("✅ 测试全部通过")
            return result
        
        print(f"⚠️ 有 {result['failed']} 个测试失败")
        
        if attempt < max_retries:
            print("准备重试...")
            # 可以在这里添加自动修复逻辑
    
    print(f"❌ 已达到最大重试次数 ({max_retries})")
    return result

测试报告保存

{
  "phases": {
    "7": {
      "status": "completed",
      "test_results": {
        "framework": "pytest",
        "existing_tests": {"total": 20, "passed": 20, "failed": 0},
        "new_tests": {"total": 5, "passed": 5, "failed": 0},
        "all_passed": true,
        "retry_count": 0
      }
    }
  }
}

失败处理

如果测试失败且超过重试次数:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ⚠️ 测试失败
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

已重试 3 次,仍有 {failed_count} 个测试失败:

## 失败的测试
1. {test_1}
2. {test_2}

## 可能的原因
{analysis}

## 请选择:
A. 自动修复 - 安排子代理修复问题
B. 手动处理 - 我来查看和修复
C. 跳过测试 - 继续下一阶段(不推荐)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━