ollama本地部署的deepseek解析接口文档,结合Python生成pytest+yml的框架用例

前言

在接口测试中,测试工程师通常需要根据开发提供的接口文档手动编写测试用例。这种方式不仅耗时,还容易遗漏边界场景。通过 DeepSeek 模型的语义理解能力,可以自动从接口文档中生成详细的接口测试用例,并结合 pytest 和 YAML 测试框架,打造一套高效、易于维护、可扩展的接口测试解决方案。

本篇文章以实战为核心,展示如何通过 DeepSeek 辅助生成接口测试用例,并结合 pytest 和 YAML 框架实现落地化的接口测试框架。


目标

  1. 快速生成接口测试用例
    • 根据开发提供的接口文档,自动生成接口测试用例,覆盖正常场景、异常场景和边界值。
  2. 构建 pytest + YAML 测试框架
    • 通过 YAML 文件定义测试数据,实现测试数据与代码分离。
  3. 具备实战价值
    • 支持动态用例生成,易扩展,适合不同项目场景。
  4. 实现自动化测试
    • 自动调用接口并校验返回值,生成详细的测试报告。

方案设计

1. DeepSeek 的作用

通过本地部署的 DeepSeek 模型,解析输入的接口文档,生成接口测试用例。DeepSeek 的具体作用包括:

  • 语义理解:自动提取接口文档中的参数、方法、请求示例和响应示例。
  • 用例生成:生成包括正常、异常、边界值等场景的接口测试用例。

2. pytest + YAML 测试框架

  • 测试数据驱动:测试用例和测试数据存储在 YAML 文件中,代码只需读取并执行,降低维护成本。
  • 高复用性:通过 pytest 的参数化功能,动态加载 YAML 文件中的用例。
  • 易扩展:支持多接口、多用例的管理和执行。

接口文档示例

以下是开发提供的接口文档示例(api_doc.md):

### 接口:用户登录
- URL: `/api/v1/login`
- 方法: `POST`
- 请求参数:
  - `username` (string): 用户名,必填
  - `password` (string): 密码,必填
- 响应示例:
  ```json
  {
      "status": "success",
      "data": {
          "user_id": 12345,
          "token": "abc123"
      }
  }

接口:获取用户信息

  • URL: /api/v1/user
  • 方法: GET
  • 请求参数:
    • user_id (integer): 用户 ID,必填
    • token (string): 访问令牌,必填
  • 响应示例:
    {
         
        "status": "success",
        "data": {
         
            "user_id": 12345,
            "username": "test_user",
            "email": "test_user@example.com"
        }
    }
    

---

## **通过 DeepSeek 生成接口测试用例**

### **调用 DeepSeek 推理服务**

以下代码使用 DeepSeek 模型解析接口文档并生成接口测试用例。

```python
import requests

# 本地 Ollama DeepSeek 推理服务地址
DEESEEK_API_URL = "http://localhost:11434/api/generate"

def generate_test_cases_from_docs(api_doc_path):
    """
    调用 DeepSeek,根据接口文档生成测试用例
    """
    with open(api_doc_path, "r", encoding="utf-8") as f:
        api_doc = f.read()

    # 构造 DeepSeek 请求
    payload = {
        "model": "deepseek-r1:1.5b",
        "prompt": f"根据以下接口文档生成接口测试用例ÿ
### 如何为 DeepSeek 编写测试用 #### 使用场景概述 为了更好地理解如何编写适用于 DeepSeek 的测试用,先了解其应用场景有助于构建有效的自动化脚本。DeepSeek 可以将自然语言描述的测试用转化为 Playwright 或 Selenium 脚本,从而简化了 Web 应用程序的功能测试流程[^1]。 #### 测试用结构设计 当准备一份用于转化成自动化测试脚本的测试用文档时,建议遵循以下几点: - **清晰的目标定义**:每一个测试案都应有明确的目的,说明要验证的具体功能或特性。 - **操作步骤详尽化**:详细记录每一步骤的操作细节以及预期的结果,这包括但不限于点击按钮、输入数据等交互行为及其对应的页面响应情况。 - **环境配置信息**:提供必要的浏览器版本、操作系统等相关设置参数以便于模拟真实用户的访问条件。 #### 示教程 下面是一个简单的子来展示怎样创建适合被 DeepSeek 解析并转换为代码形式的测试计划: 假设目标是对登录界面执行基本的身份认证检查,则可以这样撰写相应的测试方案: | 步骤编号 | 动作 | 预期结果 | |----------------|------------------------------------| | 1 | 打开网站 URL `https://example.com/login` | 成功加载登录页 | | 2 | 输入用户名 "testuser" | 用户名字段显示正确 | | 3 | 输入密码 "password123!" | 密码字段不回显明文 | | 4 | 单击提交按钮 | 页面跳转至主页或提示错误消息 | 此表格中的每一项都将由 DeepSeek 处理,并最终生成对应框架下的 Python 代码片段如下所示: 对于 Playwright: ```python from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) page = browser.new_page() # Step 1: Navigate to login page page.goto('https://example.com/login') # Step 2 & 3: Enter username and password page.fill('#username', 'testuser') page.fill('#password', 'password123!') # Step 4: Click submit button page.click('input[type="submit"]') # Verify redirection or error message presence here... ``` 而对于 Selenium 则可能是这样的实现方式: ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() try: driver.get("https://example.com/login") # Locate elements using appropriate locators (e.g., ID, name, XPath) user_input = driver.find_element(By.ID, "username") pass_input = driver.find_element(By.ID, "password") # Perform actions on these elements according to the test case steps user_input.send_keys("testuser") pass_input.send_keys("password123!") submit_button = driver.find_element(By.CSS_SELECTOR, "input[type='submit']") submit_button.click() finally: driver.quit() ``` 通过这种方式编写的测试用不仅易于理解和维护,而且能够充分利用像 DeepSeek 这样的工具自动生成高效的自动化测试脚本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python测试之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值