swagger-to-testcases

Polar Sponsor
爱发电 赞助
.NET 9.0

这是一个 Swagger/OpenAPI 规格文件 → API 自动化测试用例 的转换工具 ,同时附带完整的 pytest 测试运行框架。 核心能力: 输入:Swagger/OpenAPI 2.0 或 3.x 规格文件(JSON 或 YAML) 输出两种格式: Excel 测试用例表(26列完整用例,含请求参数、预期结果、测试数据等) 参阅:接口自动化全字段清单-CSDN博客 pytest 测试框架文件(可直接运行的测试代码 + 配置文件) 一键生成两种交付物 Excel 用例表可直送 QA 团

Swagger to Test Cases -- API 自动化测试用例生成 + 测试框架

功能概述

Swagger to Test Cases -- API 自动化测试用例生成 + 测试框架是一项面向实际任务的技能,主要用于从 Swagger/OpenAPI 2.0/3.x 规格文件生成 API 自动化测试用例,支持两种输出:;Excel 用例表 和 pytest 测试框架文件;

核心要点

  • 同时提供一个完整的测试运行框架,包含配置管理、日志、HTTP封装、Fixture、报告五大核心模块;
  • 核心模块架构;
  • 模块 1: 配置模块。

使用与执行

它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Swagger to Test Cases -- API 自动化测试用例生成 + 测试框架

从 Swagger/OpenAPI 2.0/3.x 规格文件生成 API 自动化测试用例,支持两种输出: Excel 用例表 和 pytest 测试框架文件。

同时提供一个完整的测试运行框架,包含配置管理、日志、HTTP封装、Fixture、报告五大核心模块。

核心模块架构

swagger-to-testcases/
  framework/              # 测试运行框架
    __init__.py           # 框架入口,统一导出
    config.py             # 1. 配置模块 - 多环境切换
    logger.py             # 2. 日志模块 - 结构化日志
    http_client.py        # 3. HTTP请求封装 - 统一请求+断言+提取
    fixtures.py           # 4. Fixture机制 - 登录/初始化/清理
    reporter.py           # 5. 报告模块 - Allure报告
    conftest.py           # pytest 全局配置模板
  config/                 # 多环境配置文件
    default.yaml          # 默认配置
    dev.yaml              # 开发环境
    test.yaml             # 测试环境
  scripts/
    parse_swagger.py      # Swagger 解析器
    generate_testcases.py # Excel/pytest 生成器
    run.py                # 一键管道脚本
  project_templates/
    pyproject.toml        # 项目依赖模板

模块 1: 配置模块 (framework/config.py)

多环境配置管理,优先级:环境变量 > 环境YAML > default.yaml

功能

  • 支持 dev/test/staging/prod 多环境切换
  • 管理 base_url、账号、数据库连接、认证配置
  • 环境变量覆盖:TEST_BASE_URL, TEST_DATABASE_HOST 等
  • 配置项通过点号路径访问:config.get('database.host')

使用

from framework import config

# 切换环境
# export TEST_ENV=test
base_url = config.base_url       # http://test.example.com/api/v1
db_host = config.database['host']
timeout = config.timeout          # 30

# 设置运行时 token
config.set_token('xxx-token-xxx')

配置文件格式 (config/default.yaml)

base_url: "http://localhost:8080"
timeout: 30
headers:
  Content-Type: "application/json"
accounts:
  admin:
    username: "admin"
    password: "admin123"
database:
  host: "localhost"
  port: 3306
  database: "test_db"
auth:
  login_path: "/api/login"
  token_key: "token"
  token_type: "Bearer"
report:
  allure_dir: "reports/allure-results"
  log_dir: "reports/logs"

模块 2: 日志模块 (framework/logger.py)

结构化日志,请求/响应/断言都有专用方法,失败时快速定位。

功能

  • 双输出:控制台(INFO级别) + 按日期文件(DEBUG级别)
  • 专用方法:logger.request(), logger.response(), logger.assertion()
  • 自动脱敏:Authorization、token、cookie、password 等敏感字段掩码
  • 自动截断:过长 body/headers 超过2000字符自动截断
  • 提取变量:logger.extract() 记录关联变量值
  • 测试步骤:logger.step() 标记测试流程节点

日志格式

2026-06-05 16:30:00 | INFO  | test_user.py:25 | REQUEST  GET http://...
2026-06-05 16:30:00 | INFO  | test_user.py:26 | RESPONSE 200 (45ms)
2026-06-05 16:30:00 | INFO  | test_user.py:27 | ASSERT [PASS] status code == 200
2026-06-05 16:30:00 | ERROR | test_user.py:27 | ASSERT [FAIL] jsonpath $.code

模块 3: HTTP请求封装 (framework/http_client.py)

统一请求入口,自动处理 header、token、超时、重试、异常,内置断言和关联提取。

功能清单

功能 说明
统一请求 get/post/put/patch/delete,自动拼接 base_url
公共 header 自动携带 Content-Type, Accept 等
Token 自动注入 set_token() 后所有请求自动带 Authorization
超时控制 默认30s,可全局配置或单次覆盖
重试机制 可配次数+间隔,仅对 5xx 重试
异常处理 Timeout/ConnectionError 统一捕获并记录
状态码断言 resp.assert_status(200)
字段断言 resp.assert_jsonpath({'$.code': 0})
业务码断言 resp.assert_business_code()
包含断言 resp.assert_contains('success')
存在断言 resp.assert_field_exists('data.id')
数据库断言 client.db_assert(db_cfg, 'users', where, expect)
变量提取 resp.extract({'token': '$.data.token'})
参数化 请求体支持 {{variable}} 占位符自动替换
链式调用 所有断言方法返回 self,支持链式

使用

from framework import client

# 基础请求
resp = client.get('/api/users', params={'page': 1})

# 自动断言 + 提取
resp = client.get('/api/users/1')
resp.assert_status(200)
   .assert_jsonpath({'$.code': 0})
   .assert_business_code()
   .extract({'user_id': '$.data.id'})

# 使用提取的变量
client.get('/api/users/{{user_id}}')

# POST 带 body 自动生成
client.post('/api/users', body={'name': 'John', 'email': 'john@test.com'})
   .assert_status(201)

# 数据库断言
client.db_assert(
    config.database,
    table='users',
    where={'id': 1},
    expect={'status': 1}
)

模块 4: Fixture机制 (framework/fixtures.py)

测试前置/后置管理,登录、初始化、清理一站式。

功能

功能 方法
自动登录 fixture.login('admin') 或 fixture.login_if_needed()
数据库初始化 fixture.init_database(init_sql='...')
自定义 headers fixture.init_headers({'X-Version': '1.0'})
注册清理任务 fixture.register_cleanup(fn)
DB 清理 fixture.cleanup_db('users', {'id': 123})
HTTP 清理 fixture.cleanup_request('delete', '/users/123')
全部清理 fixture.cleanup()

使用

from framework import fixture

class TestUser:
    @pytest.fixture(autouse=True)
    def setup(self):
        fixture.login_if_needed('admin')   # 登录前置
        yield
        fixture.cleanup()                  # 清理后置

模块 5: 报告模块 (framework/reporter.py)

生成 Allure 报告 + 邮件发送,自动附加请求/响应/断言信息。

功能

  • 自动检测 allure-pytest 可用性,不可用时降级为文件记录
  • attach_request/response/assertion 附加详细数据到 Allure 报告
  • 自动脱敏:敏感 header 值掩码
  • generate_summary() 生成 JSON 摘要报告(总数/通过/失败/跳过/通过率)
  • 邮件发送:通过 SMTP 发送精美 HTML 报告,支持附件(Allure报告zip/Excel用例/日志)
  • 邮件内容:通过率可视化进度条、失败用例详情、测试结果表格
  • 密码安全:SMTP密码支持环境变量 TEST_REPORT_EMAIL_PASSWORD

邮件配置 (config/default.yaml)

report:
  email:
    smtp_host: "smtp.163.com"
    smtp_port: 465
    smtp_ssl: true
    from_addr: "test-report@163.com"
    from_name: "API测试报告"
    password: ""              # 推荐用环境变量避免明文
    to_addrs:
      - "dev-team@company.com"
    cc_addrs: []

使用

from framework import reporter

# 方式1:直接发送(使用配置的收件人)
reporter.send_email(
    summary={'total': 100, 'passed': 98, 'failed': 2, 'skipped': 0},
    title='User模块测试报告'
)

# 方式2:指定收件人 + 附件
reporter.send_email(
    summary=summary,
    to_addrs=['qa@company.com', 'dev@company.com'],
    attachments=['reports/allure-report.zip', 'tests/testcases.xlsx']
)

# 方式3:一键打包 Allure 报告并发送
reporter.send_email_with_allure(
    summary=summary,
    allure_report_dir='reports/allure-report',
    testcases_xlsx='tests/testcases.xlsx'
)

# 方式4:使用 EmailSender 直接控制
from framework.reporter import EmailSender
sender = EmailSender()
sender.send_simple(
    subject='构建通知',
    body='

测试全部通过

详情见附件

', body_type='html' )

命令行使用

# 运行测试并生成报告
pytest tests/ --alluredir=reports/allure-results -v

# 生成 Allure 静态报告
allure generate reports/allure-results -o reports/allure-report

# 发送邮件报告(在 conftest 的 pytest_sessionfinish hook 中自动发送)

工作流程

方式一:生成 Excel 用例表(默认)

python scripts/run.py swagger.json
# 输出: swagger_testcases.xlsx

方式二:生成 pytest 测试框架

python scripts/run.py swagger.json --format pytest --output tests/ --with-excel
# 输出: tests/test_*.py + tests/conftest.py + tests/testcases.xlsx

方式三:分步执行

# Step 1: 解析 Swagger
python scripts/parse_swagger.py swagger.json > testcases.json

# Step 2: 生成文件
python scripts/generate_testcases.py testcases.json tests/ --format pytest --with-excel

在项目中运行

  1. 将 framework/ 目录复制到测试项目
  2. 配置 config/default.yaml 和环境配置文件
  3. 将生成的 tests/ 目录放到项目根目录
  4. 安装依赖:pip install -r requirements.txt(或使用 project_templates/pyproject.toml)
  5. 运行:pytest tests/ --alluredir=reports/allure-results -v
  6. 查看报告:allure serve reports/allure-results

Excel 输出格式

26列完整测试用例表,视觉格式化(蓝色表头/冻结首行/自动筛选/颜色编码)。

详见 references/field_spec.md。

依赖

requests>=2.28
openpyxl>=3.1
pyyaml>=6.0
pytest>=7.0
pymysql>=1.0          # 可选,DB断言需要
allure-pytest>=2.13   # 可选,Allure报告需要

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

0

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

0

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

0

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习