如何快速录入web应用的api接口到yml文件中

189 阅读5分钟

快速录入 Web 应用的 API 接口到 YML 文件中,可以通过以下几种方式来实现,具体取决于接口文档的来源(如抓包工具、Swagger 文档、Postman 配置等)。以下是几种常用的方法以及如何将接口数据快速转化为 YML 文件的详细步骤:


1. 使用 Swagger 导出 API 数据

如果你的 Web 应用有 Swagger 或 OpenAPI 文档,可以直接从中提取接口定义并转换为 YML 文件。

1.1 导出 Swagger/OpenAPI 文档

  • 打开你的 Swagger 文档页面(通常是 /swagger-ui.html 或类似路径)。
  • 在 Swagger 页面中找到 "Export""Download JSON/YAML" 按钮,下载接口文档文件。
  • 导出的文件通常是 swagger.jsonswagger.yaml

1.2 转换为测试用例格式的 YML

  • Swagger 文档描述了 API 的请求和响应,你可以编写一个脚本从 Swagger 文件中提取数据并转化为测试用例格式的 YML 文件。

示例代码:将 Swagger JSON 转换为 YML

import json
import yaml

def convert_swagger_to_test_cases(swagger_file, output_file):
    with open(swagger_file, 'r', encoding='utf-8') as f:
        swagger_data = json.load(f)

    test_cases = []
    for path, methods in swagger_data.get("paths", {}).items():
        for method, details in methods.items():
            case = {
                "name": details.get("summary", f"{method.upper()} {path}"),
                "request": {
                    "method": method.upper(),
                    "url": path,
                    "headers": {},  # 默认空头部,可根据需要添加
                    "body": {},  # 默认空请求体
                },
                "expected": {
                    "status_code": 200,  # 默认的期望状态码
                    "body": {},  # 默认空响应体
                }
            }
            test_cases.append(case)

    with open(output_file, 'w', encoding='utf-8') as f:
        yaml.dump({"test_cases": test_cases}, f, allow_unicode=True)

# 调用示例
convert_swagger_to_test_cases("swagger.json", "test_cases.yml")

运行后输出的 test_cases.yml 示例:

test_cases:
  - name: "用户登录"
    request:
      method: POST
      url: "/api/login"
      headers: {}
      body: {}
    expected:
      status_code: 200
      body: {}
  - name: "获取用户信息"
    request:
      method: GET
      url: "/api/users/{user_id}"
      headers: {}
      body: {}
    expected:
      status_code: 200
      body: {}

注意: 你可以进一步优化脚本,提取 Swagger 的请求参数和响应字段,自动填充到 headersbodyexpected 中。


2. 使用 Postman 导出接口

如果团队使用 Postman 管理接口请求,可以直接从 Postman 导出接口集合并转换为 YML 文件。

2.1 从 Postman 导出接口集合

  • 打开 Postman。
  • 选择需要导出的 Collection
  • 点击 Export 按钮,选择导出为 JSON 格式
  • 保存为 postman_collection.json

2.2 转换为测试用例格式的 YML

  • 使用 Python 脚本解析 Postman 导出的 JSON 文件,将接口请求和响应内容转换为 YML 文件。

示例代码:将 Postman JSON 转换为 YML

import json
import yaml

def convert_postman_to_test_cases(postman_file, output_file):
    with open(postman_file, 'r', encoding='utf-8') as f:
        postman_data = json.load(f)

    test_cases = []
    for item in postman_data.get("item", []):
        request = item.get("request", {})
        case = {
            "name": item.get("name", "Unnamed Test Case"),
            "request": {
                "method": request.get("method", "GET"),
                "url": request.get("url", {}).get("raw", ""),
                "headers": {h["key"]: h["value"] for h in request.get("header", [])},
                "body": request.get("body", {}).get("raw", ""),
            },
            "expected": {
                "status_code": 200,  # 默认的期望状态码
                "body": {},  # 可根据需要手动补充
            }
        }
        test_cases.append(case)

    with open(output_file, 'w', encoding='utf-8') as f:
        yaml.dump({"test_cases": test_cases}, f, allow_unicode=True)

# 调用示例
convert_postman_to_test_cases("postman_collection.json", "test_cases.yml")

输出的 test_cases.yml 示例:

test_cases:
  - name: "用户登录"
    request:
      method: POST
      url: "http://example.com/api/login"
      headers:
        Content-Type: "application/json"
      body: '{"username": "user", "password": "pass"}'
    expected:
      status_code: 200
      body: {}
  - name: "获取用户信息"
    request:
      method: GET
      url: "http://example.com/api/users/{user_id}"
      headers: {}
      body: ""
    expected:
      status_code: 200
      body: {}

3. 使用抓包工具(如 Fiddler、Charles)

如果接口没有现成的文档,但可以通过抓包工具监控请求数据,可以将抓包的请求导出并转化为 YML 文件。

3.1 抓包工具的导出

  • 使用工具如 FiddlerCharlesWireshark,抓取接口的请求和响应。
  • 导出抓包记录为 HTTP Raw 数据或 JSON 格式。

3.2 手动转换为 YML

  • 抓包数据通常包含完整的请求和响应内容,可以通过脚本将其转换为 YML 格式。
  • 如果导出的数据是 HTTP Raw 格式,可以解析出请求的方法、URL、头部和请求体。

4. 手动录入的辅助工具

4.1 使用模板简化手动录入

  • 为 YML 文件设计一个模板,减少重复工作:
    test_cases:
      - name: ""
        request:
          method: ""
          url: ""
          headers: {}
          body: {}
        expected:
          status_code: 200
          body: {}
    
  • 填充每个接口的模板数据,直接生成完整的 YML。

4.2 使用 GUI 工具

  • 如果测试用例较多,可以开发一个简单的 GUI 工具,允许用户在界面中录入接口数据并导出为 YML 文件。
  • 例如使用 Python 的 TkinterPyQt,提供字段输入框和导出按钮。

5. 自动化接口扫描工具

如果你的 Web 应用没有接口文档,但可以通过自动化工具扫描 API,可以尝试以下工具:

5.1 自动化工具

  • Swagger/OpenAPI Generator:自动生成接口文档。
  • Postman API Scanner:从运行中的应用自动抓取接口数据。
  • 工具如 Restler:基于应用程序的行为生成接口定义。

5.2 转换为 YML

  • 使用工具生成的接口文档,按上述方法解析并转化为测试用例 YML。

6. 实时录入的改进方法

如果团队需要更高效的录入方式,可以考虑以下优化方案:

  1. 接口开发规范化
    • 要求开发团队提供 Swagger 或 OpenAPI 文档,减少后续转换步骤。
  2. 录入与测试一体化
    • 构建一个工具,直接在录入时生成对应的测试用例模板。
  3. 数据驱动测试
    • 设计一个通用的 YML 结构,支持动态填充参数,减少重复录入工作。

总结

通过以上方法,你可以快速录入 Web 应用的 API 接口到 YML 文件中。以下是常见方法的对比:

方法优点缺点
Swagger 导出自动化程度高,容易转换为 YML依赖 Swagger 文档的质量
Postman 导出支持复杂接口,易于转换需要维护 Postman 集合
抓包工具适用于无文档的接口手动处理抓包数据
自动化扫描工具自动生成接口数据需要额外工具支持
手动录入模板灵活性强,适合小规模测试用例费时,容易出错

选择适合你的项目规模和需求的方式,以提高录入效率和测试用例的质量!