乐于分享
好东西不私藏

手把手教你用AI打造一个「接口测试用例自动生成助手」(附完整代码)

手把手教你用AI打造一个「接口测试用例自动生成助手」(附完整代码)

做接口自动化的同学,每天最耗时的工作是什么?写测试用例。

尤其是当你面对一份几十个接口的文档时,每个接口都要写请求、构造数据、写断言… 重复劳动不说,还容易遗漏边界场景。

如果能让AI帮你读接口文档,直接生成pytest测试代码,你只需要复核一下,那该多好?

今天我就用30行Python代码,调用大模型API,实现这样一个「AI测试用例生成助手」。代码可以直接复制运行(只需替换你的API Key)。‍

一、先看效果

输入一段接口描述(OpenAPI格式或自然语言):

{  "path": "/api/login",  "method": "POST",  "parameters": {    "username": "string, 必填",    "password": "string, 必填, 长度6-20"  },  "response": {    "200": {"token": "string"}  }}

AI自动生成的测试代码(pytest):

import pytestimport requestsdef test_login_success():    url = "http://example.com/api/login"    payload = {"username": "testuser", "password": "12345678"}    resp = requests.post(url, json=payload)    assert resp.status_code == 200    assert "token" in resp.json()def test_login_missing_password():    url = "http://example.com/api/login"    payload = {"username": "testuser"}    resp = requests.post(url, json=payload)    assert resp.status_code == 400

整个过程不到3秒,再也不用手敲了。

二、核心原理

说白了就三步:

把接口定义(Swagger/JSON/自然语言)塞进Prompt

让大模型输出pytest格式的测试代码

保存成.py文件,直接运行

我们用的是OpenAI API(你也可以换成国产的通义千问、智谱GLM等,调用方式几乎一样)。

三、环境准备(只需两步)

1. 安装依赖

pip install openai requests pytest

2. 获取API Key

访问 OpenAI Platform,注册并创建Key

或使用国内模型:百度千帆、阿里百炼、智谱AI(文末有替换方法)

四、完整代码(可直接运行)

import osimport refrom openai import OpenAI# ========== 配置区 ==========# 请替换成你自己的 API KeyAPI_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxx"BASE_URL = "https://api.openai.com/v1"   # 国内用户需使用代理或替换成国内模型地址MODEL = "gpt-3.5-turbo"                 # 或 gpt-4# ==========================client = OpenAI(api_key=API_KEY, base_url=BASE_URL)def generate_test_cases(api_description: str) -> str:    """    调用大模型,根据接口描述生成 pytest 测试用例代码    :param api_description: 接口描述文本 (支持 JSON / 自然语言)    :return: 生成的 Python 代码字符串    """    prompt = f"""你是一个资深的接口自动化测试工程师。请根据以下接口描述,生成完整的 pytest 测试用例代码。要求:- 使用 requests 库发送请求- 包含至少3个测试用例:正常场景、异常场景、边界场景- 每个测试用例要有明确的断言(状态码、返回字段)- 代码要可以直接复制运行接口描述如下:{api_description}只输出 Python 代码,不要多余的解释。"""    try:        response = client.chat.completions.create(            model=MODEL,            messages=[                {"role": "system", "content": "你是专业的测试开发工程师,只输出可执行的Python代码。"},                {"role": "user", "content": prompt}            ],            temperature=0.3,   # 降低随机性,保证输出稳定        )        code = response.choices[0].message.content        # 去掉 markdown 代码块标记(如果模型加了)        code = re.sub(r'```python\n?|```\n?', '', code)        return code.strip()    except Exception as e:        print(f"调用AI生成失败: {e}")        return ""def save_test_file(code: str, filename: str = "test_generated.py"):    """保存生成的代码到文件"""    with open(filename, "w", encoding="utf-8") as f:        f.write(code)    print(f"✅ 测试用例已保存到 {filename}")if __name__ == "__main__":    # 示例接口描述(你可以替换成自己的接口文档)    api_desc = """    接口路径: POST /api/user/register    请求体 (JSON):    {        "username": "字符串,必填,3-20位",        "email": "邮箱格式,必填",        "password": "字符串,必填,6-20位"    }    响应:    成功 200: {"code":0, "message": "success", "user_id": 123}    失败 400: {"code": 1001, "message": "用户名已存在"}    失败 422: {"code": 1002, "message": "参数校验失败"}    """    print("🚀 正在生成测试用例,请稍候...")    test_code = generate_test_cases(api_desc)    if test_code:        save_test_file(test_code)        print("\n生成的代码如下:\n")        print(test_code)        # 可选:立即运行生成的测试(需确保依赖已安装)        run = input("\n是否立即执行生成的测试?(y/n): ").strip().lower()        if run == 'y':            os.system("pytest test_generated.py -v")    else:        print("❌ 生成失败,请检查网络或API Key")‍

五、如何把这段代码用到你的实际工作中?

1. 对接Swagger/OpenAPI

如果你们的接口文档是Swagger JSON,稍加改造就能自动读取:

import json, requests# 拉取Swagger文档swagger_url = "http://your-api.com/v2/api-docs"doc = requests.get(swagger_url).json()# 提取每个接口的path、method、参数for path, methods in doc['paths'].items():    for method, detail in methods.items():        description = f"{method.upper()}{path}\n参数:{detail.get('parameters', [])}\n响应:{detail.get('responses', {})}"        test_code = generate_test_cases(description)        save_test_file(test_code, f"test_{path.replace('/', '_')}.py")

2. 增加断言自定义

你可以在Prompt中告诉AI公司内部的校验规则,比如:

“断言时统一检查返回码是否为0,如果不是0则打印message”

AI会自动把规则写进代码。

3. 连续生成+批量运行

写出一个脚本,一口气把几十个接口的测试用例全生成,然后pytest批量执行。

六、常见问题与解决方案

Q1:我没有OpenAI API Key怎么办?

用国产模型替换,只需改BASE_URL和MODEL。以智谱AI为例:API_KEY = "你的智谱API Key"BASE_URL = "https://open.bigmodel.cn/api/paas/v4/"MODEL = "glm-4-flash"其他模型(通义千问、文心一言)同理,参照官方文档改endpoint。

Q2:生成的代码有语法错误或跑不通?

可以增加一个简单的语法校验,或者把错误信息喂回给AI让它修正:

import subprocessresult = subprocess.run(["python", "-m", "py_compile", "test_generated.py"], capture_output=True)if result.returncode != 0:    # 把错误信息重新发给AI修正    fix_prompt = f"代码有语法错误,请修正:\n{result.stderr.decode()}"

Q3:生成的测试用例不够全面?

优化你的Prompt,增加细节,例如:“请覆盖边界值:username长度为3和20,密码包含特殊字符”。

七、进阶方向(让助手更智能)

支持多轮对话:生成后不满意,可以继续让AI修改

自动执行并分析失败:AI根据报错信息自动修复断言

集成到CI:接口文档有变更,自动触发重新生成用例

这些都超出了纯自动化的范畴,但你现在的代码已经打下了基础——你已经开始用AI改造自己的工作流了。

写在最后

测试开发人员的核心竞争力,从来不是熟练度,而是搭建高效工具的能力。

这个AI助手花半小时就能跑起来,但它每天能帮你节省1小时的手工编写时间。更重要的是,它展示了一种思路:凡是重复的脑力劳动,都可以交给AI。

如果你成功跑起来了,欢迎在评论区晒出你生成的第一个测试用例。

下一期我将分享《AI自动修复接口测试报错》,让你的用例不仅能生成,还能自愈。‍

 每一次互动,皆是鼓励, 每一份支持,共促成长。

商务合作:RYXtest

相关学习资料