上几篇教程,我们搭建了一套完整的企业级接口自动化测试工程体系,但还有一个痛点:AI 生成的脚本偶尔会有小毛病(比如漏了 import、断言不严谨),需要人工修改。本文的目标是:让 Skill 具备自我评估与自动修复能力,当生成物未通过质量检查时,自动诊断、修正,直到输出可以直接运行且通过所有检查的代码。全程无需人工干预,真正实现“一句话需求 → 可信任的自动化脚本”。

1. 自愈型 Skill 的工作原理

我们利用 Claude Code 的 Skill 可以定义 多步骤交互逻辑 的特点,设计一个循环:

  1. 生成:根据需求初步生成脚本。

  2. 评估:在本地执行自动化检查(代码规范、pytest 收集、烟雾测试)。

  3. 判断:若检查全部通过,输出最终结果并结束;若失败,收集错误信息作为反馈。

  4. 修正:将反馈注入上下文,让 Skill 分析原因并修改代码。

  5. 重复 2~4,直到通过或达到最大重试次数。

整个过程由 Skill 内的提示词和脚本配合完成,Claude Code 充当“大脑”,本地 Python 脚本充当“质检员”。

2. 准备工作

沿用之前的项目结构,确保已安装所有依赖。新增一个 质检脚本 scripts/validate_generated.py,用于自动评估生成的测试代码。

2.1 创建质检脚本

scripts/validate_generated.py 内容如下:

#!/usr/bin/env python3
"""
自动评估生成的接口测试脚本质量。
检查项:
1. ruff 代码规范
2. pytest 收集用例是否成功
3. 自定义规则(必须使用 BaseRequest)
4. 可选:执行快速 smoke 测试
返回 JSON 格式结果,供 Skill 解析。
"""
import subprocess
import sys
import json
import os
from pathlib import Path

PROJECT_ROOT = Path(__file__).parent.parent
TESTS_DIR = PROJECT_ROOT / "tests"
REPORT = {"passed": False, "checks": []}

def run_check(name, cmd):
    try:
        result = subprocess.run(cmd, shell=True, capture_output=True, text=True, cwd=PROJECT_ROOT)
        success = result.returncode == 0
        REPORT["checks"].append({
            "check": name,
            "status": "pass" if success else "fail",
            "output": result.stdout[-500:] + result.stderr[-500:] if not success else ""
        })
        return success
    except Exception as e:
        REPORT["checks"].append({"check": name, "status": "error", "output": str(e)})
        return False

def main():
    print("🧪 开始评估生成的测试代码...")

    # 1. ruff 检查
    run_check("ruff lint", "ruff check tests/ common/")

    # 2. 自定义规则:必须使用 BaseRequest
    run_check("custom: use BaseRequest", f"python {PROJECT_ROOT}/scripts/check_base_request.py")

    # 3. pytest 收集用例(不执行)
    run_check("pytest collection", "pytest --collect-only -q")

    # 4. 可选:执行 smoke 测试(如果有标记)
    smoke_result = subprocess.run(
        "pytest -m smoke --tb=short -q", shell=True, capture_output=True, text=True, cwd=PROJECT_ROOT
    )
    smoke_passed = smoke_result.returncode == 0
    REPORT["checks"].append({
        "check": "smoke test execution",
        "status": "pass" if smoke_passed else "fail",
        "output": smoke_result.stdout[-1000:] + smoke_result.stderr[-1000:]
    })
    
    REPORT["passed"] = all(c["status"] == "pass" for c in REPORT["checks"])
    print(json.dumps(REPORT, indent=2, ensure_ascii=False))
    sys.exit(0 if REPORT["passed"] else 1)

if __name__ == "__main__":
    main()

别忘了 scripts/check_base_request.py 仍保留(见上一篇教程)。

从脚本到工程体系:用 Claude Code + GLM-5 搭建企业级 AI 接口自动化测试平台

2.2 修改 Skill 文件支持自愈

我们将之前的 enterprise-api-test-gen.md 升级为 self-healing-api-gen.md,内容如下:

# 自愈型企业接口自动化脚本生成器

## 目标
根据用户需求,生成符合企业规范且可直接运行的 Python 接口自动化代码。生成后必须自我评估,若不通过则自动修正,直到通过所有质量检查。

## 运作流程(严格按此顺序)
1. **理解需求**:读取 `docs/api.yaml` 和 `specs/coding_standard.md`,明确用户业务流。
2. **初始生成**:输出完整的文件列表及每个文件的代码,遵守规范。
3. **调用质检**:用户(或自动化脚本)会执行 `python scripts/validate_generated.py`,并将返回的 JSON 结果提供给你。
4. **分析失败原因**:如果 `passed` 为 `false`,仔细阅读 `checks` 中失败的项及其 `output`,定位错误(可能是语法错误、缺少 import、违反规范等)。
5. **修正代码**:仅修改有问题的文件,重新输出这些文件的完整代码。注意不要改动原本已通过检查的部分。
6. **重复评估**:再次等待用户提供最新的评估结果。如果仍失败,继续修正,直到通过或超过 5 次尝试。
7. **最终输出**:当评估通过后,输出一段总结,说明最终生成的文件列表,以及经过多少次修正。

## 重要约束
- 生成的所有代码必须可直接运行,不得包含占位符(如 `TODO`、`pass`)。
- 所有请求必须通过 `common.base_request.BaseRequest` 发送,并使用 `config` fixture 获取环境 URL。
- 数据驱动用例必须从 `data/` 目录读取 YAML 文件,且文件存在。
- 业务流用例中需要用到的 token 等上下文,通过前置步骤获取并传递,严禁硬编码。
- 修正时仅输出需要修改的文件内容,不要重复输出未变动的文件。
- 若同一错误反复出现,尝试换一种实现方式,并输出你的分析思路(但不要输出给最终代码)。

这个 Skill 利用了我们定义的“质检 API”(即运行 validate_generated.py 并返回 JSON),Claude Code 可以像调用工具一样,依赖用户将质检结果粘贴回来。实际上,可以进一步通过 MCP (Model Context Protocol) 让 Claude Code 直接执行本地脚本,但为了小白友好,我们采用“用户中转”的方式:Skill 生成代码 → 用户在终端运行质检脚本 → 将 JSON 结果粘贴回对话 → Skill 自愈。

3. 实操演示:零干预闭环的完整过程

假设我们已在项目根目录,并且已按之前的教程准备好 docs/api.yamlspecs/coding_standard.mdcommon/ 等。

3.1 启动 Claude Code 并加载 Skill

claude

在对话中激活 Skill:

@self-healing-api-gen 请读取 docs/api.yaml 和 specs/coding_standard.md。

3.2 提出需求

业务流:用户登录后查询商品列表,然后下单购买第一个商品。
请生成完整的自动化脚本,包含数据驱动(登录成功、密码错误两种场景),并添加 smoke 标记。

3.3 Skill 初始生成

Claude 会输出一系列文件,例如:

common/__init__.py, common/base_request.py, data/login_data.yaml, tests/user/test_login.py, tests/order/test_flow.py ...

并给出完整代码。

3.4 用户运行质检

将生成的代码写入磁盘(Claude Code 的 apply 模式可自动写入,或者手动创建)。然后运行质检:

python scripts/validate_generated.py

首次大概率会失败,例如:

{
  "passed": false,
  "checks": [
    {"check": "ruff lint", "status": "fail", "output": "tests/user/test_login.py:5:1: F401 'os' imported but unused"},
    {"check": "custom: use BaseRequest", "status": "pass", "output": ""},
    {"check": "pytest collection", "status": "pass", "output": ""},
    {"check": "smoke test execution", "status": "fail", "output": "E   AttributeError: 'TestLogin' object has no attribute 'config'"}
  ]
}

3.5 将质检结果反馈给 Claude

直接将终端输出的 JSON 复制粘贴到 Claude 对话中,并说:

评估结果如上,请修正。

Claude(基于 Skill 设定的流程)会分析:

  • ruff 报错:test_login.py 第 5 行导入了未使用的 os,需要删除。

  • smoke 测试失败:TestLogin 对象没有 config 属性,说明用例没有使用 config fixture,需要修改函数签名并传入。

然后它会输出修正后的文件代码,比如只输出 tests/user/test_login.py 的修正版。

3.6 再次质检

用户将修正后的代码更新到文件,再次运行质检脚本,将新的 JSON 反馈给 Claude。

反复 2~3 次后,通常能够通过。最终 Claude 会输出:

✅ 评估通过!
文件列表:
- tests/user/test_login.py
- tests/order/test_flow.py
- data/login_data.yaml
- conftest.py
修正次数:2

4. 进阶:将质检直接集成到 Claude Code(MCP)

如果你希望彻底解放双手,可以编写一个 MCP 服务器,让 Claude Code 直接调用 validate_generated.py。这样就不需要用户手动粘贴结果了。

4.1 创建 MCP 服务器脚本

在项目根目录创建 mcp_server.py

import subprocess
import json
import sys
from pathlib import Path

def validate():
    result = subprocess.run(
        [sys.executable, "scripts/validate_generated.py"],
        capture_output=True, text=True, cwd=Path(__file__).parent
    )
    # 脚本的 stdout 是 JSON
    return result.stdout

if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] == "validate":
        print(validate())

4.2 在 .claude.yaml 中配置 MCP

mcp_servers:
  - name: validate-tests
    command: python
    args: ["mcp_server.py", "validate"]

之后在 Skill 中可以直接调用 validate-tests 工具获取质检结果,形成真正的全自动闭环。Skill 文件可以改为:

...
3. **生成后自动评估**:无需等待用户,立即调用工具 `validate-tests` 获取评估结果。
...

这样整个流程完全无人值守。

5. 持续集成中的自愈闭环

将自愈流程嵌入 CI:当新生成的脚本提交后,CI 执行全量测试,如果失败,触发一个自动化 Job 调用 Claude Code + Skill 进行修复,并自动提交修复后的代码(需权限控制)。你甚至可以实现 “夜间自愈流水线”:每天凌晨对所有不稳定用例尝试自动修复,人工只需审核 Pull Request。

6. 总结

通过给 Skill 增加 “评估-反馈-修正” 的闭环逻辑,我们让 AI 生成的质量得到了质的飞跃。你不再是一个命令的发布者,而是一个 AI 测试架构师,只需定义标准和流程,剩下的交给自愈型 Skill 去完成。

下一步建议:

  • 扩展质检脚本,加入更丰富的检查项(如接口覆盖率、性能基线)。

  • 为 Skill 建立“记忆库”,将常见错误模式沉淀为 fix_patterns.md,加速修正。

  • 与团队共享这个自愈 Skill,统一自动化产出标准。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐