codex可基于本地openapi 3.0 yaml自动生成pytest测试模块,支持单路径、全量或按标签生成,需指定--spec路径、--include-edges、--assert-response和--mock-external等参数定制,并验证生成文件的参数化、断言与mock是否完备。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要用Codex把一份OpenAPI 3.0 YAML文档快速转成可运行的pytest测试模块,但手动解析schema、构造参数、写断言太耗时——Codex能直接读取本地swagger.yaml,识别路径、方法、请求体结构和响应定义,自动生成带参数化、异常注入、Mock依赖的完整测试文件。
确认接口文档格式与位置
打开终端,进入项目根目录,执行ls -l api/swagger.yaml或ls -l docs/openapi.json,确保文档存在且为OpenAPI 3.0规范。Codex不支持Swagger 2.0(即swagger: '2.0'开头的旧版),若发现版本不符,需先用openapi-generator-cli convert升级,否则生成的测试会漏掉requestBody校验逻辑。
文档必须是本地文件,不能是URL链接。Codex无法访问https://api.example.com/openapi.json这类远程地址。
基础命令生成测试
方法一:默认生成(适合单接口快速验证)
在终端中输入:codex test generate --spec api/swagger.yaml --path /users/{id} --method GET
方法二:批量生成全部接口(适合首次搭建测试骨架)
codex test generate --spec api/swagger.yaml --all
方法三:按标签筛选生成(如只测支付相关接口)
codex test generate --spec api/swagger.yaml --tag payment
注意:该命令仅对YAML中tags:字段定义明确的接口生效;若未声明tags,此命令不输出任何内容。
定制化生成关键参数
第一步:强制覆盖边界值
添加--include-edges参数,Codex将自动为数值型字段生成负数、零、最大整数、超长字符串等输入,避免遗漏400 Bad Request类错误场景。
通过 Codex CLI 生成图片,支持尺寸控制和批量模式。依赖:codex (npm)。代理默认启用。用 generate.sh 生成单张,batch_generate.sh 批量生成游戏 UI 素材,gen_size.sh 指定尺寸。所有输出保存至 ~/.codex/generated_images/。
第二步:指定响应断言粒度
使用--assert-response status_code,body_schema,让Codex不仅校验HTTP状态码,还基于responses.200.content.application/json.schema做JSON Schema校验。若省略此项,生成的测试仅检查status_code==200,不验证字段类型与必填性。
第三步:注入Mock外部依赖
若接口调用内部服务(如用户中心RPC),添加--mock-external user-service,Codex会在测试中插入@patch('xxx.client.UserServiceClient')并预设返回值。不加此参数时,真实调用会触发ConnectionRefusedError。
检查生成结果与运行验证
生成的文件默认保存在tests/api/test_generated_from_swagger.py。打开该文件,确认以下三项已存在:
① @pytest.mark.parametrize覆盖了/users/123、/users/abc、/users/-1三种ID格式;
② 每个测试函数末尾有assert response.status_code == 200及assert 'name' in response.json();
③ 若接口定义了404响应,存在对应test_get_user_not_found函数且含assert response.status_code == 404。
执行pytest tests/api/test_generated_from_swagger.py -v。若报错ImportError: No module named 'api',先在当前目录运行export PYTHONPATH=$(pwd)再重试。
观察输出中是否出现collected 7 items。若只有1~2项,说明Codex未识别到全部路径——大概率是swagger.yaml中paths:缩进错误或缺失openapi: 3.0.0声明行。
这一步操作起来很简单,直接把文件拖进去就行。










