应通过fixtures目录结构固化数据形态、定义动态生成规则、明确指令让codex注入fixture并验证使用效果,实现测试数据跨用例复用、零污染、免硬编码。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让 Codex 生成的测试数据能跨多个测试用例复用、不污染数据库、不依赖真实环境,而不是每次运行都手动改 JSON 或硬编码 ID。
第一步:用 fixtures 目录结构固化数据形态
在项目根目录下新建 tests/fixtures/ 文件夹,里面按模块分组存放 YAML 或 JSON 文件,例如:user.yaml、coupon_active.json、order_failed_with_stock_shortage.yaml。每个文件只描述一个逻辑实体的状态快照,不要混入断言或流程控制逻辑。
这一步的关键是命名必须带业务语义,不能叫 data1.json。Codex 读到 coupon_active 就知道该数据代表“活动进行中且库存充足”的状态,后续生成测试时才能准确绑定场景。
第二步:定义数据生成规则而非静态值
在 tests/fixtures/schema.yaml 中声明字段约束和动态生成策略:
user_id: { type: int, generator: "increment(1001)" }
created_at: { type: datetime, generator: "now(-2d)" }
通过本地 Codex 或 OpenClaw OAuth 凭证直接调用 ChatGPT/Codex Responses 的 image_generation 工具来生成或编辑光栅图像,然后保存
coupon_code: { type: string, generator: "faker.bothify(text='COUP-??????')" }
这样 Codex 调用 fixture 时,能自动为每次测试生成唯一但符合业务规则的值,避免因 ID 冲突导致测试间相互干扰。注意:【generator 字段必须与你项目中已集成的 faker 或 mimesis 版本兼容】,否则加载时报错且无提示。
第三步:让 Codex 主动识别并注入 fixture
向 Codex 发送指令时,明确指定 fixture 路径和用途:“基于 tests/fixtures/coupon_active.json 和 tests/fixtures/user_logged_in.yaml,为 src/services/claim.py::claim_coupon() 生成 pytest 测试,要求所有测试用例都通过 pytest.fixture 加载这两份数据,禁止硬编码字段值。”
Codex 会自动在测试文件顶部添加 @pytest.mark.usefixtures("load_coupon_active", "load_user_logged_in"),并在 conftest.py 中补全 fixture 定义。如果它没生成 conftest.py,说明你没在指令中强调“自动补全测试基础设施”,需重发并加上这句话。
第四步:验证 fixture 是否被实际使用
运行生成的测试后,立刻检查日志输出是否含 Loaded fixture: coupon_active;若没有,打开测试文件,确认是否有 def test_claim_success(load_coupon_active, load_user_logged_in): 这样的函数签名。没有则说明 Codex 仅把 fixture 当作参考文本,未真正接入 pytest 生命周期——此时要删掉整个测试文件,重新发送指令,并在末尾追加:“请确保每个测试函数参数都显式接收 fixture 变量名,不要只写 @pytest.mark.usefixtures。”










