惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MongoDB | Blog
MongoDB | Blog
博客园_首页
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
B
Blog RSS Feed
D
Docker
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
V
V2EX
量子位
雷峰网
雷峰网
月光博客
月光博客
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
分享一个面向开发者 API 自动测试工具 api-tester
ga9 · 2025-12-08 · via V2EX

分享一个面向开发者 API 自动测试工具 api-tester

已经在多个项目中使用了,大大节约了测试时间。

不在用 curl, postman 来回调参做测了


API-Tester 是一个基于 Go 语言开发的 API 自动化测试工具。

核心功能:

  • 根据 YAML 配置文件自动执行 API 测试
  • 支持测试场景编排和步骤依赖
  • 支持变量提取和数据传递
  • 支持多种断言验证
  • 生成详细的测试报告

解决的问题:

  • 自动化 API 接口测试,减少手工测试工作量
  • 支持复杂的测试场景和数据依赖关系
  • 可集成到 CI/CD 流程中实现持续测试

安装 方式一:使用 go install

go install github.com/gaoyong06/api-tester/cmd/api-tester@latest

使用: 编写一个 api-test-config.yaml

# API 规范文件路径(相对于配置文件目录)
spec: ../../openapi.yaml

# API 基础 URL
base_url: http://localhost:8106
# 请求超时时间(秒)
timeout: 30

# 请求配置
request:
  headers:
    Content-Type: application/json

# 输出目录
output_dir: ./test/reports
# 是否详细输出
verbose: true

# 日志配置
logging:
  verbose: true
  request_response: true
  variable_processing: true

# 全局变量定义
variables:
  # 正常测试数据
  test_user_id: "user-001"
  test_user_id_2: "user-002"
  test_user_id_3: "user-003"
  
  # 边界测试数据
  min_user_id: "a"  # 最短 user_id ( 1 字符)
  max_user_id: "user-id-with-maximum-length-of-36"  # 最长 user_id ( 36 字符)
  empty_string: ""
  
  # 异常测试数据
  invalid_user_id_short: ""  # 空 user_id
  invalid_user_id_long: "user-id-exceeding-maximum-length-of-36-characters"  # 超过 36 字符
  invalid_user_id_special: "user@id#with$special%chars"  # 特殊字符(如果验证规则不允许)
  sql_injection: "'; DROP TABLE api_key; --"  # SQL 注入测试
  xss_payload: "<script>alert('XSS')</script>"  # XSS 测试
  
  # 特殊字符测试
  special_chars: "!@#$%^&*()_+-=[]{}|;:',.<>?/~`"
  
  # 无效 API Key 格式
  invalid_api_key_short: "dsh_"  # 只有前缀
  invalid_api_key_wrong_prefix: "wrong_prefix_abc123"  # 错误前缀
  invalid_api_key_empty: ""  # 空 Key
  
  # App 测试数据
  test_app_key_1: "my_todo_app"
  test_app_key_2: "my_blog_app"
  test_app_key_3: "my_shop_app"
  test_app_name_1: "我的待办事项"
  test_app_name_2: "我的博客应用"
  test_app_name_3: "我的商店应用"
  test_app_type_web: "web"
  test_app_type_mobile: "mobile"
  test_app_type_desktop: "desktop"
  test_app_type_miniprogram: "miniprogram"
  test_description: "这是一个测试应用"
  test_website_url: "https://my-app.com"
  test_package_name: "com.example.app"
  test_miniprogram_appid: "wx1234567890abcdef"
  
  # 无效 App Key 格式
  invalid_app_key_short: "ab"  # 太短(少于 3 字符)
  invalid_app_key_long: "app_key_exceeding_maximum_length_of_fifty_characters"  # 超过 50 字符
  invalid_app_key_uppercase: "MyApp"  # 包含大写字母
  invalid_app_key_special: "my-app"  # 包含特殊字符(连字符)
  invalid_app_key_space: "my app"  # 包含空格
  invalid_app_key_empty: ""  # 空 app_key

# 测试场景
scenarios:
  # ==================== 基础功能测试 ====================
  
  # 1. 健康检查
  - name: 01-健康检查
    description: 测试服务健康状态
    steps:
      - name: 检查服务健康
        endpoint: /health
        method: GET
        assert:
          status: 200
          body:
            $.data.status: UP
            $.data.service: api-key-service
            $.success: true

  # ==================== API Key 管理接口测试 ====================
  
  # 2. 创建 API Key 正常流程
  - name: 02-创建 API Key 正常流程
    description: 测试创建 API Key 的正常流程
    steps:
      - name: 创建 API Key-用户 1
        endpoint: /api/v1/api-keys
        method: POST
        body:
          user_id: "{{.test_user_id}}"
        assert:
          status: 200
          body:
            $.data.apiKey: "!null"
            $.data.apiKeyId: "!null"
            $.data.keyPrefix: "!null"
            $.success: true
        extract:
          api_key_id_1: $.data.apiKeyId
          api_key_spec_1: $.data.apiKey

      - name: 创建 API Key-用户 2
        endpoint: /api/v1/api-keys
        method: POST
        body:
          user_id: "{{.test_user_id_2}}"
        assert:
          status: 200
          body:
            $.data.apiKey: "!null"
            $.data.apiKeyId: "!null"
            $.success: true
        extract:
          api_key_id_2: $.data.apiKeyId
          api_key_spec_2: $.data.apiKey

运行测试

api-tester run --config api-test-config.yaml

就会执行测试了