尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

API 测试 Agent 自动生成测试用例:TaoToken 统一 Key 接入与配置骨架

发布时间:2026/9/29 23:20:06

资讯中心
01
ARTICLE

API 测试 Agent 自动生成测试用例:TaoToken 统一 Key 接入与配置骨架

API 测试 Agent 自动生成测试用例:TaoToken 统一 Key 接入与配置骨架
1. 为什么 API 测试用例总写不完接口文档写完了功能也联调通了但测试用例还是一片空白。这是很多研发和测试同学的真实处境接口一多手工写用例就成了体力活正常流程写一遍边界值再补一遍异常分支往往就漏了。上线之后才发现某个参数传空会 500或者重复提交没做幂等回头再补测试成本翻倍。我这次要落地的场景很具体你手里已经有一份 OpenAPI/Swagger 文档或者至少有一份接口说明想用 Agent 批量产出可执行的测试用例并且这些用例能真的跑起来、真的打到接口上。核心检索词就是 API、Agent、测试用例自动生成——用 Agent 读接口定义生成 pytest requests 的测试代码再通过一个统一的 API 通道把请求发出去验证。适合谁看有接口文档、想批量产出用例的研发与测试已经在用 pytest 但懒得手写断言的想把「生成用例」和「跑通用例」串成一条流水线的。整篇的目标是让你照配置就能复现先配好统一 Key 和通道再让 Agent 生成用例最后跑一次请求看到成功结果。这里有个关键点容易被忽略Agent 生成用例只是第一步用例里的请求最终要发到某个模型或某个被测服务上。如果每个 Agent、每个脚本都各自维护一套 Key 和地址配置会散得到处都是。所以我会先用一个统一的 API 通道把出口收口再在这个基础上做生成和验证。2. TaoToken 统一 Key 与通道前置准备在动手写生成脚本之前先把出口统一掉。TaoToken 在这里扮演的角色是「统一 Key 统一 API 通道」你只需要申请一个 Key配置一个 base_urlAgent 脚本、pytest 用例、CI 里的验证步骤都复用同一份配置不用在每个文件里硬编码。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个地址不加 UTM 参数直接用于代码里的 base_url。你需要提前做两件事第一拿到 API Key。进入控制台的 API Keys 页面创建地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。创建后复制出来后面所有配置都引用它不要写死在代码里。第二确认你要用的模型名。不同模型在生成测试用例时的风格不一样有的偏保守只写正常流程有的会主动补边界。可以先在模型对话页面试几条 prompt地址是 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 确认输出格式符合你的预期再批量跑。注意Key 只放在环境变量或本地配置文件里不要提交到 Git。后面给的 settings.json 和 config.toml 都会用占位符引用环境变量。如果你打算长期跑编码类 Agent、或者把生成用例接进日常开发流可以了解一下 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 它更适合高频、持续的编码与 Agent 场景。接入细节和参数说明统一看文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。3. 可复制的 settings.json 与 config.toml 骨架这一节是全文的核心配置直接复制改 Key 就能用。我分成两份settings.json 给 Agent 脚本和 Node 侧工具用config.toml 给 Python 侧和命令行工具用。两份配置指向同一个 base_url保证出口一致。3.1 settings.json 骨架{ api: { base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, timeout_seconds: 60, max_retries: 3 }, agent: { model: your-model-name, temperature: 0.2, max_tokens: 4096 }, test_generation: { framework: pytest, http_client: requests, output_dir: ./tests/generated, include_boundary: true, include_error_case: true } }几个参数说明一下。base_url固定填 https://taotoken.net/api 不要带结尾斜杠。api_key_env是环境变量名脚本运行时从环境里读不落盘。temperature建议 0.2 左右测试用例需要稳定输出太高会每次生成不一样的结构。include_boundary和include_error_case控制 Agent 是否补边界和异常分支这两个开关直接决定用例覆盖率。3.2 config.toml 骨架[api] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY timeout_seconds 60 max_retries 3 [agent] model your-model-name temperature 0.2 max_tokens 4096 [test_generation] framework pytest http_client requests output_dir ./tests/generated include_boundary true include_error_case true [pytest] testpaths [tests/generated] python_files test_*.py addopts -v --tbshort两份配置字段是对齐的你改一份另一份同步改即可。[pytest]段可以直接被 pytest 读取省得再单独维护 pytest.ini。3.3 环境变量设置# Linux / macOS export TAOTOKEN_API_KEYsk-你的key # Windows PowerShell $env:TAOTOKEN_API_KEYsk-你的key设置完可以用一行命令确认读到了python -c import os; print(key loaded:, bool(os.environ.get(TAOTOKEN_API_KEY)))输出key loaded: True就说明环境变量生效了。这一步没做对后面所有请求都会 401先确认再往下走。4. Agent 生成用例并跑通请求的完整验证配置好了现在走一遍完整流程读接口定义 → Agent 生成用例 → 跑 pytest → 看到成功结果。我用一个用户创建接口做例子接口定义如下。{ endpoint: /api/users, method: POST, parameters: { username: string, required, email: string, required, age: integer, optional }, description: 创建新用户 }4.1 生成脚本import os import json import requests def load_settings(path./settings.json): with open(path, r, encodingutf-8) as f: return json.load(f) def query_agent(prompt, settings): api_cfg settings[api] agent_cfg settings[agent] api_key os.environ.get(api_cfg[api_key_env]) if not api_key: raise RuntimeError(API key not found in environment) url api_cfg[base_url].rstrip(/) /v1/chat/completions headers { Authorization: fBearer {api_key}, Content-Type: application/json } payload { model: agent_cfg[model], temperature: agent_cfg[temperature], max_tokens: agent_cfg[max_tokens], messages: [{role: user, content: prompt}] } resp requests.post(url, headersheaders, jsonpayload, timeoutapi_cfg[timeout_seconds]) resp.raise_for_status() return resp.json()[choices][0][message][content] def build_prompt(api_info, gen_cfg): return f你是一个 API 测试专家。请为以下接口生成 pytest requests 测试用例。 接口信息 - 路径{api_info[endpoint]} - 方法{api_info[method]} - 参数{json.dumps(api_info[parameters], ensure_asciiFalse)} - 说明{api_info[description]} 要求 1. 测试成功响应 2. 测试参数校验缺少必填字段 3. 测试错误处理 4. {测试边界条件 if gen_cfg[include_boundary] else } 5. {测试异常分支 if gen_cfg[include_error_case] else } 6. 使用 pytest requestsBASE_URL 从环境变量读取 7. 每个用例有清晰命名和必要注释 只输出完整 Python 测试代码不要额外解释。 def strip_code_fence(text): text text.strip() if text.startswith(): lines text.splitlines() lines lines[1:] if lines and lines[-1].strip().startswith(): lines lines[:-1] text \n.join(lines) return text.strip() if __name__ __main__: settings load_settings() api_info { endpoint: /api/users, method: POST, parameters: { username: string, required, email: string, required, age: integer, optional }, description: 创建新用户 } prompt build_prompt(api_info, settings[test_generation]) code strip_code_fence(query_agent(prompt, settings)) out_dir settings[test_generation][output_dir] os.makedirs(out_dir, exist_okTrue) out_path os.path.join(out_dir, test_users_api.py) with open(out_path, w, encodingutf-8) as f: f.write(code) print(fgenerated: {out_path})跑一下python generate_tests.py输出generated: ./tests/generated/test_users_api.py就说明生成成功。打开文件能看到 Agent 产出的用例结构大致是这样import os import pytest import requests BASE_URL os.environ.get(API_BASE_URL, http://localhost:8000) class TestUserAPI: def test_create_user_success(self): data {username: testuser, email: testexample.com, age: 25} resp requests.post(f{BASE_URL}/api/users, jsondata) assert resp.status_code 201 assert resp.json()[username] testuser def test_create_user_missing_email(self): data {username: testuser} resp requests.post(f{BASE_URL}/api/users, jsondata) assert resp.status_code 400 def test_create_user_invalid_email(self): data {username: testuser, email: invalid-email} resp requests.post(f{BASE_URL}/api/users, jsondata) assert resp.status_code 4004.2 跑通验证export API_BASE_URLhttp://localhost:8000 pytest tests/generated -v成功结果长这样tests/generated/test_users_api.py::TestUserAPI::test_create_user_success PASSED tests/generated/test_users_api.py::TestUserAPI::test_create_user_missing_email PASSED tests/generated/test_users_api.py::TestUserAPI::test_create_user_invalid_email PASSED 3 passed in 0.42s 看到3 passed就说明整条链路通了Agent 通过统一通道生成用例用例通过 requests 打到被测服务断言全部通过。如果被测服务还没起可以先用一个 mock server 顶上重点是验证「生成 → 执行」这条链路本身没问题。5. 本篇常见报错与排查这一节列几个我实际踩过的坑按报错信息对照排查。401 Unauthorized环境变量没读到或者 Key 复制时带了空格。先跑第 3.3 节那行确认命令再看 Key 前后有没有多余字符。还有一种情况是 base_url 写成了带路径的形式比如https://taotoken.net/api/v1正确写法是https://taotoken.net/api路径拼接交给代码里的/v1/chat/completions。生成的代码带 python 围栏Agent 有时会把代码包在 markdown 围栏里直接写文件会导致语法错误。脚本里的strip_code_fence就是干这个的如果你的模型输出格式不同把这段清理逻辑按实际输出调整。pytest 收集不到用例检查文件名是不是test_*.py类名是不是Test开头方法名是不是test_开头。这三个命名规则不满足pytest 默认不会收集。另外testpaths配的目录要和实际输出目录一致。请求超时timeout_seconds默认 60生成大文件时可能不够。如果 Agent 返回慢先调大到 120 再试。同时确认max_retries生效网络抖动时能自动重试。断言状态码对不上Agent 生成的断言是基于接口文档推断的实际服务返回可能不同。比如文档写 201实际返回 200。这种情况不要改 Agent改被测服务的契约或者把断言改成in (200, 201)这种宽松写法但更推荐对齐文档。生成的用例重复temperature太高会导致每次生成结构漂移。固定到 0.2 以下并且在 prompt 里明确要求「只输出代码」。如果还是重复检查是不是把同一份接口定义喂了两次。提示排查顺序建议是「先确认 Key 和 base_url → 再确认生成代码能解析 → 最后确认被测服务可达」。大部分问题出在前两步。6. 把生成流程接进你的日常配置和验证都跑通之后剩下的就是把它变成习惯。我的做法是把生成脚本挂到接口文档变更之后文档一改跑一次生成diff 一下新增的用例人工过一遍断言是否合理然后提交。这样测试用例始终跟着接口走不会出现文档和用例两张皮。如果你要长期跑这类 Agent建议把 Key 和通道配置收口到一份文件里所有脚本引用同一份避免散落。需要更高频的编码与 Agent 支持可以看 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。接入参数和更多示例统一在文档里 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。Key 管理在控制台 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。想先试模型输出风格去对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。最后留一个我自己的经验Agent 生成的用例不要直接全量信任尤其是断言部分。把它当成一个「写得更快的初级测试」你负责审断言和补业务语义它负责把重复的骨架铺开。这样覆盖率上去了质量也没丢。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。