📝面试求职:「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝职场经验干货:
软件测试工程师简历上如何编写个人信息(一周8个面试)
软件测试工程师简历上如何编写专业技能(一周8个面试)
软件测试工程师简历上如何编写项目经验(一周8个面试)
软件测试工程师简历上如何编写个人荣誉(一周8个面试)
软件测试行情分享(这些都不了解就别贸然冲了.)
软件测试面试重点,搞清楚这些轻松拿到年薪30W+
软件测试面试刷题小程序免费使用(永久使用)
做接口自动化的同学,每天最耗时的工作是什么?写测试用例。
尤其是当你面对一份几十个接口的文档时,每个接口都要写请求、构造数据、写断言… 重复劳动不说,还容易遗漏边界场景。
如果能让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 pytest import requests def 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 pytest2. 获取API Key
访问 OpenAI Platform,注册并创建Key
或使用国内模型:百度千帆、阿里百炼、智谱AI(文末有替换方法)
四、完整代码(可直接运行)
import os import re from openai import OpenAI # ========== 配置区 ========== # 请替换成你自己的 API Key API_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 subprocess result = 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自动修复接口测试报错》,让你的用例不仅能生成,还能自愈。
最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】