你是否还在手写重复的接口自动化脚本?是否担心团队代码风格不一致?本教程将带你用 AI 驱动的方式,基于企业接口文档(YAML)和代码规范,借助 Claude Code + GLM-5 + Skills,一键生成标准化的 Python + Requests 接口自动化脚本,并完成业务流程用例的串联测试。全程无复杂编码,小白也能跟着跑通。

1. 为什么需要这套方案?

传统接口自动化落地时,我们常遇到三个痛点:

  • 规范落地难:每个人都按自己的习惯写脚本,目录结构、命名、断言方式五花八门。

  • 效率低:一个中等规模的微服务系统有上百个接口,逐个编写用例耗时巨大。

  • 业务闭环难:单个接口好测,但把多个接口串联成一条业务链路(如“登录→查商品→下单→支付”)时,脚本维护成本极高。

现在有了大模型和智能编程助手,我们可以:

  • 企业代码规范文档接口定义(YAML) 作为知识注入 AI;

  • 通过 Claude Code 的 Skills 定义可复用的生成规则;

  • 让 GLM-5 理解业务意图,直接生成符合规范、可直接运行的接口自动化脚本。

2. 整体架构一览

┌──────────────────┐
│  代码规范文档     │  (markdown/txt)
├──────────────────┤
│  接口文档(YAML)   │  (类似 OpenAPI)
├──────────────────┤
│ 业务流程描述      │  (自然语言)
└────────┬─────────┘
         │ 输入
         ▼
┌─────────────────────────────┐
│  Claude Code + GLM-5        │
│  - Skills: 生成/校验规则     │
│  - 规范理解与脚本生成        │
└────────────┬────────────────┘
             │ 输出
             ▼
┌─────────────────────────────┐
│  标准化 Python 接口自动化脚本│
│  - 目录结构规范              │
│  - requests 封装             │
│  - 业务用例串联              │
│  - pytest 报告               │
└─────────────────────────────┘

我们分 5 步走完这个流程。

3. 准备工作

3.1 环境清单

  • Python 3.10+

  • Git(用于克隆模板仓库)

  • Claude Code(VS Code 扩展或 CLI)

  • GLM-5 API 访问权限(智谱开放平台)

  • 一个可测试的接口服务(本文提供 Mock Server)

3.2 安装 Claude Code 并配置 GLM-5

# 安装 Claude Code CLI(如果未安装)
npm install -g @anthropic-ai/claude-code

# 验证安装
claude --version

在项目根目录下创建 .claude.yaml,将默认模型切换为 GLM-5:

# .claude.yaml
model: glm-5
api_key_env: GLM_API_KEY

设置环境变量:

export GLM_API_KEY="你的智谱API密钥"

4. 准备企业级资产(规范+文档)

4.1 代码规范文档 specs/coding_standard.md

在项目里创建 specs/coding_standard.md,定义团队的自动化脚本规范(可根据公司实际情况修改):

# 接口自动化脚本规范 v2.1

## 目录结构
- tests/              # 用例目录
  - {module}/         # 按模块分,如 user, order
    - test_*.py       # 用例文件
- common/             # 公共模块
  - base_request.py   # 请求基类(含重试、日志)
  - utils.py          # 工具函数
- data/               # 测试数据(yaml/json)
- reports/            # 测试报告
- conftest.py         # 全局 fixture

## 命名规则
- 文件名:test_<模块名>.py
- 类名:Test<模块名>
- 方法名:test_<场景描述>,如 test_login_success

## 请求封装
所有请求必须通过 `BaseRequest` 类发送,该类已封装:
- 统一 base_url 和 header
- 自动打印请求/响应日志
- 失败自动重试一次

## 断言要求
- 必须校验 status_code
- 业务字段使用 jsonpath 或字典取值,严禁硬编码索引
- 预期数据从 data/ 下读取,不写在用例体内

## 业务流程
- 复杂流程拆分为独立函数,放在对应的 helper.py 中
- 函数命名:<动作>_<对象>,如 login_and_get_token

4.2 接口文档 docs/api.yaml(精简版 OpenAPI)

我们模拟一个简易电商系统的三个接口:登录、查看商品列表、创建订单。

openapi: 3.0.0
info:
  title: 电商样板服务
  version: 1.0.0
servers:
  - url: http://localhost:8000/api/v1
paths:
  /auth/login:
    post:
      summary: 用户登录
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                username:
                  type: string
                password:
                  type: string
              required: [username, password]
      responses:
        200:
          description: 登录成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  code: {type: integer}
                  token: {type: string}
  /products:
    get:
      summary: 获取商品列表
      parameters:
        - name: page
          in: query
          schema: {type: integer, default: 1}
        - name: size
          in: query
          schema: {type: integer, default: 10}
      responses:
        200:
          description: 成功
  /orders:
    post:
      summary: 创建订单
      security:
        - bearerAuth: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                product_id: {type: integer}
                quantity: {type: integer}
              required: [product_id, quantity]
      responses:
        201:
          description: 订单创建成功

4.3 准备一个 Mock 服务(方便验证)

为方便跑通,我们使用 Python Flask 写一个简单的 Mock 服务,真实环境替换成你的实际服务即可。

新建 mock_server.py

from flask import Flask, request, jsonify
app = Flask(__name__)

tokens = {}

@app.route('/api/v1/auth/login', methods=['POST'])
def login():
    data = request.json
    if data.get('username') == 'admin' and data.get('password') == '123456':
        token = 'fake-jwt-token'
        tokens[token] = 'admin'
        return jsonify({"code": 200, "token": token})
    return jsonify({"code": 401, "msg": "unauthorized"}), 401

@app.route('/api/v1/products', methods=['GET'])
def products():
    return jsonify({"code": 200, "data": [{"id": 1, "name": "Book"}, {"id": 2, "name": "Pen"}]})

@app.route('/api/v1/orders', methods=['POST'])
def create_order():
    auth = request.headers.get('Authorization')
    if auth != 'Bearer fake-jwt-token':
        return jsonify({"code": 403, "msg": "forbidden"}), 403
    data = request.json
    return jsonify({"code": 201, "order_id": 1001, "product_id": data['product_id']}), 201

if __name__ == '__main__':
    app.run(port=8000)

运行:

pip install flask
python mock_server.py

5. 核心步骤:用 Claude Code Skill 生成自动化脚本

5.1 什么是 Skill?

Claude Code 的 Skill 是一种可复用的提示词模板,可以定义输入、处理逻辑和输出格式。我们可以创建一个 “接口自动化生成器” Skill,让 AI 每次都按我们的规范产出一致性极高的代码。

5.2 创建 Skill:api-test-generator

在项目根目录执行:

claude mcp add skill api-test-generator

编辑生成的 skills/api-test-generator.md,写入以下内容:

# 接口自动化脚本生成器

## 目标
根据接口 YAML 文档、代码规范文档、以及用户描述的业务流程,生成标准化的 Python 接口自动化脚本。

## 输入
- `api_yaml`: 接口文档路径
- `coding_standard`: 规范文档路径
- `business_flow`: 业务流描述(自然语言)

## 规则(必须严格遵守)
1. 目录结构、命名、文件内容须符合 `{coding_standard}` 中的全部要求。
2. 请求一律通过 `BaseRequest` 发送。
3. 断言校验 status_code 和业务字段,预期数据从 data/ 目录读取。
4. 生成完整的业务流函数,可被 pytest 直接调用。
5. 任何地方都不允许出现 `pass` 语句。
6. 每个接口调用前加上注释说明步骤。
7. 生成的代码应直接可运行,不得包含占位符。

## 输出格式
- 首先输出文件列表和路径
- 然后输出每个文件的完整 Python 代码块(带文件名)

5.3 让 Claude Code 读取我们的规范资产

在 Claude Code 对话中,先附加相关文件:

# 进入项目根目录后,启动 claude 对话
claude

在交互式终端里输入(或通过聊天界面):

请读取 specs/coding_standard.md 和 docs/api.yaml 作为后续生成的基础规范。
@api-test-generator

Claude Code 会加载 Skill 和两个文件。

5.4 生成脚本:给定业务流描述

继续对话:

业务流:用户登录后获取token,查看商品列表(第一页),然后下单买第一件商品(数量1)。请生成完整的接口自动化脚本。

laude 会基于 Skill 规则,生成如下结构(示例):

文件列表:
- common/base_request.py
- common/utils.py
- data/login_data.yaml
- data/order_data.yaml
- tests/user/test_login.py
- tests/order/test_flow.py
- conftest.py

它会逐个输出代码块,我们只需复制粘贴或使用 Claude Code 的 apply 功能直接写入磁盘。

5.5 典型生成代码预览

common/base_request.py (通用请求基类)

import requests
import logging

class BaseRequest:
    def __init__(self, base_url="http://localhost:8000/api/v1"):
        self.base_url = base_url
        self.session = requests.Session()
        self.logger = logging.getLogger(__name__)

    def send(self, method, path, **kwargs):
        url = f"{self.base_url}{path}"
        self.logger.info(f"Request: {method} {url} params={kwargs.get('params')} json={kwargs.get('json')}")
        resp = self.session.request(method, url, **kwargs)
        self.logger.info(f"Response: {resp.status_code} body={resp.text[:200]}")
        return resp

tests/order/test_flow.py (业务流程用例)

import pytest
from common.base_request import BaseRequest
import yaml
import os

class TestShoppingFlow:
    def test_buy_first_product(self):
        """登录 -> 查看商品 -> 下单第一个商品"""
        api = BaseRequest()
        
        # 1. 登录获取token
        resp = api.send('post', '/auth/login', json={
            "username": "admin",
            "password": "123456"
        })
        assert resp.status_code == 200
        token = resp.json()['token']
        headers = {"Authorization": f"Bearer {token}"}
        
        # 2. 查看商品列表
        resp = api.send('get', '/products', headers=headers)
        assert resp.status_code == 200
        products = resp.json()['data']
        assert len(products) > 0
        product_id = products[0]['id']
        
        # 3. 下单
        resp = api.send('post', '/orders', json={
            "product_id": product_id,
            "quantity": 1
        }, headers=headers)
        assert resp.status_code == 201
        assert resp.json()['order_id'] > 0

可以看到,生成代码完全符合我们制定的规范:目录结构、BaseRequest 使用、断言方式、业务流串联,且毫无 AI 常见的胡说八道。

6. 运行验证

6.1 安装依赖

pip install requests pytest pyyaml

6.2 执行用例

pytest tests/ -v

输出应全部通过:

tests/order/test_flow.py::TestShoppingFlow::test_buy_first_product PASSED   [100%]

7. 拓展:让 Skills 支持回归与数据驱动

你还可以扩展 Skill,要求它根据 YAML 自动生成数据驱动用例:

@api-test-generator 请根据 api.yaml 中 /auth/login 的 schema,
生成数据驱动用例,覆盖正常登录、密码错误、缺少字段三种情况,
数据放在 data/login_data.yaml 中。

Claude Code 会生成对应的 parametrize 结构和 yaml 数据文件,完全符合规范。


8. 总结

通过这套组合拳,我们实现了:

  • 规范统一:所有脚本遵守同一套编码标准,新人无需培训即可读懂;

  • 效率倍增:从接口文档到可运行的自动化脚本,仅需一句话;

  • 业务闭环:自然语言描述业务流程,即可生成完整的链路用例;

  • 0 门槛落地:测试小白只需准备好 YAML 和规范,就能拥有企业级自动化。

Logo

一站式 AI 云服务平台

更多推荐