pytest + yaml 框架 -19.根据 swagger.json 自动生成 yaml 格式自动化用例

前言

当项目中有很多个接口的时候,一个个去转成 yaml 文件的用例会很浪费时间,现在大部分格式的接口都有swagger.json 接口文档。
那么我们可以从swagger.json 中解析出接口,自动生成 yaml 格式的用例,就可以大大减少工作量。
此功能在 v1.1.5 版本上实现

环境要求
Python 大于等于3.8版本,(低于python3.8版本不支持)
Pytest 7.2.0 最新版

pip 安装插件, 最新版本v1.1.5

pip install pytest-yaml-yoyo

使用示例

目前支持2中方式生成 yaml 用例。
1.如果有本地的 swagger.json 文件,可以放到项目根目录,自己写 a.py 文件
目录结构如下

a.py 文件调用插件中的接口即可

from pytest_yaml_yoyo.swagger_parser import SwaggerToYaml
# 作者 上海-悠悠 微信:283340479

s = SwaggerToYaml('./swagger.json')
s.parse_json()
  1. 如果 有在线的swagger.json 地址,也可以支持在线
<think>嗯,用户想知道如何自动生成接口自动化测试用,包括工具、框架和示。首先,我需要回忆一下常见的自动化测试工具和框架,比如Postman、Swagger,还有基于Pythonpytest和Robot Framework。然后,自动生成测试用的方法可能涉及模板生成或者AI模型,比如微调GPT。 用户提供的引用里提到了基于模板自动生成测试用,比如引用[1]和[3],还有使用GPT微调的方法,引用[2]。所以应该结合这些信息,分点回答工具、框架、方法,并给出示。 要注意用户需要具体的示,比如代码片段,可能还要说明原理,比如模板生成或数据驱动测试。另外,用户可能希望了解如何减少手工编写的工作量,提高效率和准确性,这也是需要强调的点。 然后,生成相关问题,可能需要围绕性能分析、优化方法、应用场景等方面,但要根据接口测试的主题来调整,比如生成用的挑战、维护方法、与手工用的比较等。 需要确保回答结构清晰,分步骤说明,比如工具推荐、框架使用、生成方法、示代码,以及注意事项。同时,引用要正确对应,比如模板生成对应引用[1],GPT微调对应引用[2],测试生成器对应引用[3]。 可能还要提到数据驱动测试,比如使用JSON或Excel作为数据源,结合pytest的参数化功能。此外,示代码需要符合用户提供的格式,用Python,并且正确使用代码块。 最后,检查是否符合系统级指令,比如数学公式的格式是否正确,是否有单独成段的独立公式,但这里可能不太涉及数学公式,所以可能不需要。确保使用中文,引用标识正确放置,比如在提到模板生成时加[^1],GPT微调加[^2],测试生成器加[^3]。 总结,回答应该分工具、框架、生成方法、示,并附上相关问题。注意引用对应的来源,代码示要简洁明了,如使用pytest和模板生成器的子。</think>### 如何自动生成接口自动化测试用? #### 1. **工具推荐** - **Postman(含Newman)**:支持通过接口文档自动生成测试集合,结合数据驱动测试,利用CSV/JSON文件批量生成用[^1]。 - **Swagger/OpenAPI**:基于API文档自动生成测试请求模板,减少手动编写请求参数的工作量。 - **AI辅助工具(如GPT微调)**:通过训练大模型理解接口文档和业务逻辑,自动生成测试用和断言逻辑。 #### 2. **框架与生成方法** - **基于模板的生成** 使用预定义的测试模板(如Jinja2、YAML)填充动态数据,快速生成用如: ```python # 示:基于模板生成测试用 from jinja2 import Template template = Template(""" def test_{{ endpoint }}(): response = requests.get("{{ url }}") assert response.status_code == 200 """) rendered_test = template.render(endpoint="user_info", url="/api/user/1") # 输出自动生成的测试代码 ``` 此方法通过替换变量生成可执行的测试代码。 - **数据驱动测试(DDT)** 结合Excel/JSON文件存储测试数据,利用框架(如pytest)自动参数化用: ```python # pytest参数化示 import pytest import requests @pytest.mark.parametrize("user_id, expected_status", [(1, 200), (999, 404)]) def test_get_user(user_id, expected_status): response = requests.get(f"/api/user/{user_id}") assert response.status_code == expected_status ``` 通过数据文件扩展测试场景[^3]。 - **AI模型生成** 微调GPT模型学习接口文档和测试逻辑,直接生成用代码: ```python # 示:调用大模型生成测试用 prompt = """ 根据以下接口文档生成测试用- 接口路径:/api/login - 方法:POST - 参数:{username: str, password: str} - 成功响应码:200 """ generated_test = gpt.generate(prompt) # 输出为Python测试代码 ``` 此方法依赖大量标注数据训练模型。 #### 3. **示:基于模板的接口测试** ```python # 使用模板生成登录接口测试 from requests import post def test_login(username, password): url = "https://api.example.com/login" payload = {"username": username, "password": password} response = post(url, json=payload) assert response.status_code == 200 assert "token" in response.json() # 通过参数化批量执行 test_data = [ ("admin", "123456", 200), ("guest", "wrong_pwd", 401) ] @pytest.mark.parametrize("username, password, code", test_data) def test_login_cases(username, password, code): response = post("/api/login", json={"username": username, "password": password}) assert response.status_code == code ``` #### 4. **注意事项** - **覆盖边界条件**:自动生成时需包含异常参数(如空值、超长字符串)。 - **断言逻辑优化**:优先验证响应结构(如JSON Schema),而非固定值。 - **维护成本**:生成的用需与接口变更同步,建议结合CI/CD流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值