基于 4SAPI 开发全场景 AI 自动化测试用例生成工具:覆盖单元测试 / 接口测试 / 功能测试全流程

7 阅读31分钟

前言

在敏捷开发的快节奏迭代中,测试用例编写与自动化脚本开发,是所有研发团队都绕不开的高频痛点:

  • 产品迭代速度快,需求变更频繁,手动编写测试用例的速度完全跟不上迭代节奏,大量回归测试场景遗漏,线上故障频发;
  • 手动编写用例极易出现场景覆盖不全的问题,正常流程用例重复冗余,异常场景、边界场景、并发场景却大量缺失,测试有效性大打折扣;
  • 单元测试、接口自动化脚本开发属于重复机械性工作,占用开发与测试工程师大量核心工作时间,人力成本极高;
  • 不同测试场景需要不同的大模型能力,想要同时适配 PRD 文档解析、代码理解、多模态原型识别,需要对接多个厂商的 SDK、申请多套密钥、维护多套适配逻辑,开发与维护成本极高;
  • 传统用例生成工具只能匹配固定规则,无法理解复杂业务逻辑,生成的用例可用性极低,无法直接落地到测试流程中。

本文就带大家从零开发一款生产级可用、全场景覆盖、高度可定制的 AI 自动化测试用例生成工具,全程代码可直接复制运行,基于 4SAPI 的全量模型兼容能力,一次接入即可调用最新的 GPT-5.4、Gemini 3.1 Pro、Claude 4.6、DeepSeek-V4 Lite、Qwen3.5-Plus 等所有主流大模型,无需单独对接多个厂商,国内直连无网络障碍,一键实现功能测试 / 接口测试 / 单元测试全场景用例生成,自动输出标准化用例文档与可直接运行的自动化脚本,新手也能快速落地。

一、技术选型与核心功能设计

1.1 核心技术栈选型

为保证工具的轻量化、跨平台兼容性与企业级落地能力,本次开发选用全平台通用的 Python 技术栈,无复杂依赖,Windows/Mac/Linux 全平台适配,可无缝集成到 DevOps 流程与测试管理平台中:

  • 核心开发语言:Python 3.10+,全平台兼容,测试生态完善,是自动化测试领域的主流开发语言

  • 核心能力底座:4SAPI 兼容 OpenAI 全量接口规范的大模型网关,100% 兼容官方 SDK,一套密钥即可调用全球所有主流大模型,国内直连无网络波动问题

  • 核心依赖库openai(官方 SDK,与 4SAPI 无缝兼容)、python-dotenv(环境变量管理)、pandas(测试用例表格生成)、PyYAML(接口文档解析)、jinja2(自动化脚本模板渲染)、python-docx(PRD 文档读取)

  • 核心模型适配(基于 4SAPI 一键接入)

    表格

    模型名称核心适配测试场景不可替代的核心优势
    GPT-5.4复杂业务场景功能测试用例、系统集成测试用例设计、全链路场景覆盖全局业务视野强,对复杂系统的业务逻辑理解深度高,能输出符合行业测试最佳实践的用例,覆盖全量业务场景与风险点
    Claude 4.6超长 PRD 产品需求文档解析、跨模块业务流程测试用例设计、全量回归测试用例生成超长上下文窗口支持,可完整加载上百页的需求文档做全量解析,跨模块业务关联分析能力极强,细节把控无遗漏
    Gemini 3.1 Pro产品原型图 / UI 设计稿解析、前端交互测试用例生成、多模态需求落地校验多模态能力行业顶尖,可直接解析原型图、设计稿,精准还原产品需求,生成贴合前端交互场景的测试用例
    DeepSeek-V4 Lite单元测试代码生成、单接口测试用例设计、简单功能快速用例输出代码理解能力专精,响应速度快,调用成本低,完美适配单文件、单接口的轻量化测试用例生成场景
    Qwen3.5-Plus中文 PRD 深度解析、国产化系统测试用例、等保合规测试用例、团队自定义规范落地中文语义理解能力拉满,完美适配国内研发团队的测试规范与合规需求,支持高度自定义的用例模板与评审标准

1.2 核心落地功能

我们的工具将覆盖研发全流程的测试用例生成需求,所有功能开箱即用,高度可定制,完美适配个人开发者与企业测试团队的需求:

  1. PRD 文档功能测试用例生成:支持 Word/TXT 格式的产品需求文档解析,自动生成标准化功能测试用例,覆盖正常流程、异常流程、边界条件、性能兼容、安全合规全维度场景
  2. 接口自动化测试用例生成:支持 Swagger/OpenAPI 接口文档解析,自动生成接口测试用例,同时输出可直接运行的 Python+pytest 自动化测试脚本,覆盖参数校验、异常返回、权限校验、并发场景
  3. 代码单元测试用例生成:支持 Python/Java/Go/JS 等主流开发语言,自动解析代码逻辑与分支场景,生成可直接运行的单元测试代码,覆盖全量分支、异常处理、边界条件
  4. 多模型智能分工生成:根据测试场景、文档大小、业务复杂度,自动调度对应最优模型,也可并行调用多模型做交叉补充,避免测试场景遗漏,提升用例覆盖率
  5. 标准化用例导出:一键导出 Excel/Markdown/CSV 格式的测试用例,完美适配禅道、Jira、TestLink 等主流测试管理平台,可直接导入使用
  6. 团队自定义规范适配:支持自定义用例模板、测试优先级规则、场景覆盖标准、自动化脚本编码规范,完美适配团队内部的测试流程与管理要求

二、前置开发准备

2.1 环境搭建与依赖安装

首先确保本地已安装 Python 3.10 及以上版本,执行以下命令验证版本:

bash

运行

python --version

版本确认无误后,创建项目文件夹并安装所需全量依赖:

bash

运行

# 创建项目目录
mkdir 4sapi-test-case-generator && cd 4sapi-test-case-generator
# 安装核心依赖
pip install openai python-dotenv pandas openpyxl pyyaml jinja2 python-docx

2.2 4SAPI 接口配置

本次开发的核心能力完全基于 4SAPI 实现,它不仅 100% 兼容 OpenAI 官方 SDK,原有业务代码零修改即可无缝迁移,还能一次接入上文所有最新版本的大模型,无需单独申请每个厂商的密钥、无需维护多套 SDK、无需处理跨境网络问题,国内直连即可稳定调用所有模型,大幅降低开发与维护成本。

配置步骤如下:

  1. 访问 4SAPI 平台完成账号注册与登录,进入控制台「API 密钥管理」模块,生成专属 API Key(密钥仅展示一次,生成后请妥善保管,切勿泄露到公开代码仓库)
  2. 在项目根目录创建.env环境配置文件,避免密钥硬编码,符合研发安全规范
  3. .env文件中写入以下核心配置:

env

# 4SAPI国内直连统一接入地址,无需代理即可稳定访问所有主流大模型
OPENAI_BASE_URL=https://4sapi.com/v1
# 4SAPI控制台生成的专属API密钥,一套密钥即可调用全量最新模型
OPENAI_API_KEY=sk-替换为你自己的4SAPI密钥
# 用例生成默认使用的基础模型,可根据需求自由切换
DEFAULT_MODEL=GPT-5.4
# 生成内容温度值,0.1-0.2适合测试用例生成场景,保证输出严谨性与场景覆盖全面性
TEMPERATURE=0.1

三、工具核心代码开发

我们延续模块化的开发思路,每个功能独立封装,便于后续扩展与维护,所有代码均符合 Python 开发规范,注释清晰,可直接复制运行。

3.1 全局客户端初始化与基础配置

在项目根目录创建test_case_generator.py核心入口文件,首先完成环境配置加载、4SAPI 客户端初始化与通用工具函数封装:

python

运行

import os
import json
from pathlib import Path
from dotenv import load_dotenv
from openai import OpenAI
import pandas as pd
from docx import Document
import yaml
from jinja2 import Template

# 加载.env环境配置
load_dotenv()

# 初始化4SAPI客户端,100%兼容OpenAI官方SDK,一套密钥调用全量最新模型
client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL"),
)

# 全局常量配置
DEFAULT_MODEL = os.getenv("DEFAULT_MODEL", "GPT-5.4")
TEMPERATURE = float(os.getenv("TEMPERATURE", 0.1))
# 支持的代码语言与后缀映射
SUPPORTED_LANGUAGES = {
    ".py": "Python",
    ".java": "Java",
    ".go": "Go",
    ".js": "JavaScript",
    ".ts": "TypeScript"
}
# 测试用例标准字段,适配主流测试管理平台
STANDARD_TEST_CASE_FIELDS = [
    "用例ID", "用例名称", "所属模块", "测试优先级", "测试类型",
    "前置条件", "测试步骤", "预期结果", "实际结果", "测试状态", "备注"
]
# 多模型能力映射,根据场景自动调度最优模型
MODEL_CAPABILITY_MAP = {
    "functional_test": "GPT-5.4",
    "long_prd_parse": "Claude 4.6",
    "prototype_parse": "Gemini 3.1 Pro",
    "unit_test": "DeepSeek-V4 Lite",
    "interface_test": "DeepSeek-V4 Lite",
    "compliance_test": "Qwen3.5-Plus"
}

# ------------------------------ 通用工具函数 ------------------------------
def call_4sapi_llm(prompt: str, system_prompt: str, model: str = DEFAULT_MODEL) -> str:
    """
    统一封装4SAPI大模型调用函数,所有用例生成模块复用,支持自由切换模型
    :param prompt: 具体需求与输入内容
    :param system_prompt: 系统提示词,定义测试专家角色与输出规范
    :param model: 调用的模型名称,基于4SAPI支持全量最新模型
    :return: 模型生成的用例结果
    """
    try:
        # 调用4SAPI接口,完全兼容OpenAI官方接口格式,无缝切换所有模型
        response = client.chat.completions.create(
            model=model,
            messages=[
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": prompt}
            ],
            temperature=TEMPERATURE,
            stream=False,
            response_format={"type": "json_object"}  # 强制JSON输出,保证结构化一致性
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        print(f"4SAPI接口调用失败(模型:{model}):{str(e)}")
        return ""

def read_prd_document(file_path: str) -> str:
    """
    读取PRD需求文档,支持docx/txt格式
    :param file_path: 文档文件路径
    :return: 文档全量文本内容
    """
    file_path = Path(file_path)
    if not file_path.exists():
        raise FileNotFoundError(f"需求文档不存在:{file_path}")
    
    file_suffix = file_path.suffix.lower()
    if file_suffix == ".docx":
        doc = Document(file_path)
        content = "\n".join([para.text for para in doc.paragraphs if para.text.strip()])
    elif file_suffix == ".txt":
        content = file_path.read_text(encoding="utf-8")
    else:
        raise ValueError(f"不支持的文档格式:{file_suffix},仅支持docx/txt格式")
    
    return content

def export_test_cases_to_excel(test_cases: list, output_path: str):
    """
    将测试用例导出为Excel文件,适配禅道、Jira等测试管理平台
    :param test_cases: 测试用例列表
    :param output_path: 输出文件路径
    """
    if not test_cases:
        print("无测试用例可导出")
        return
    
    df = pd.DataFrame(test_cases)
    df.to_excel(output_path, index=False, engine="openpyxl")
    print(f"测试用例Excel文件已生成:{output_path}")

def export_test_cases_to_markdown(test_cases: list, output_path: str, title: str = "测试用例文档"):
    """
    将测试用例导出为Markdown格式文档
    :param test_cases: 测试用例列表
    :param output_path: 输出文件路径
    :param title: 文档标题
    """
    if not test_cases:
        print("无测试用例可导出")
        return
    
    markdown_content = f"# {title}\n\n"
    markdown_content += f"## 用例概览\n\n"
    markdown_content += f"- 用例总数:{len(test_cases)}个\n"
    markdown_content += f"- 生成时间:{pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
    markdown_content += f"- 生成工具:基于4SAPI的AI自动化测试用例生成工具\n\n"
    markdown_content += f"## 用例详情\n\n"

    # 生成Markdown表格
    markdown_content += "| " + " | ".join(STANDARD_TEST_CASE_FIELDS) + " |\n"
    markdown_content += "| " + " | ".join(["---" for _ in STANDARD_TEST_CASE_FIELDS]) + " |\n"
    
    for case in test_cases:
        row = [str(case.get(field, "")) for field in STANDARD_TEST_CASE_FIELDS]
        markdown_content += "| " + " | ".join(row) + " |\n"
    
    # 写入文件
    Path(output_path).write_text(markdown_content, encoding="utf-8")
    print(f"测试用例Markdown文档已生成:{output_path}")

这里核心优势在于,基于 4SAPI 的全量兼容能力,我们仅需一套客户端代码,即可无缝切换所有最新版本的大模型,无需修改任何业务逻辑,无需对接多个厂商的 SDK,真正实现一次开发,全场景适配。

3.2 核心测试用例生成功能封装

3.2.1 PRD 文档功能测试用例生成

这是测试团队最高频的需求,支持长文档解析,自动生成标准化功能测试用例,全维度覆盖测试场景,可直接导入测试管理平台使用。

python

运行

def generate_functional_test_cases(prd_path: str, custom_rules: str = None, model: str = None) -> list:
    """
    基于PRD产品需求文档生成功能测试用例
    :param prd_path: 需求文档路径,支持docx/txt格式
    :param custom_rules: 团队自定义测试规范与用例要求,可选
    :param model: 指定使用的模型,不指定则自动调度最优模型
    :return: 标准化测试用例列表
    """
    try:
        # 读取PRD文档内容
        prd_content = read_prd_document(prd_path)
        file_name = Path(prd_path).name
        prd_length = len(prd_content)
        print(f"正在解析需求文档:{file_name}(文档长度:{prd_length}字符)")

        # 自动调度最优模型:长文档用Claude 4.6,常规文档用GPT-5.4,合规场景用Qwen3.5-Plus
        if not model:
            if prd_length > 10000:
                model = MODEL_CAPABILITY_MAP["long_prd_parse"]
            elif custom_rules and "合规" in custom_rules:
                model = MODEL_CAPABILITY_MAP["compliance_test"]
            else:
                model = MODEL_CAPABILITY_MAP["functional_test"]
        print(f"本次使用生成模型:{model}")

        # 构建系统提示词,严格定义测试用例生成规范与输出格式
        system_prompt = f"""
        你是一位拥有10年以上经验的资深测试架构师,精通功能测试、系统测试全流程,擅长基于产品需求设计高覆盖率的测试用例。
        你的任务是基于用户提供的PRD产品需求文档,生成标准化的功能测试用例,严格遵循以下要求:
        1.  用例必须100%基于需求文档生成,不得虚构需求外的场景,不得遗漏需求中的核心功能点
        2.  用例必须覆盖全维度测试场景:正常流程场景、异常流程场景、边界条件场景、数据校验场景、权限控制场景、兼容性场景、安全合规场景
        3.  测试优先级定义:P0-核心功能主流程,必须覆盖;P1-重要功能分支流程,必须覆盖;P2-边缘功能与优化场景;P3-极端边界场景
        4.  必须严格按照指定的标准字段输出,每个用例的测试步骤清晰可执行,预期结果明确可验证,无模糊性描述
        5.  必须输出标准的JSON格式,结构如下:
        {{
            "test_cases": [
                {{
                    "用例ID": "TC_{模块缩写}_{序号}",
                    "用例名称": "用例的核心测试点,简洁明确",
                    "所属模块": "需求文档中对应的功能模块",
                    "测试优先级": "P0/P1/P2/P3",
                    "测试类型": "功能测试/异常测试/边界测试/权限测试/兼容性测试",
                    "前置条件": "执行用例的前置环境与准备条件",
                    "测试步骤": "1. 步骤一\n2. 步骤二\n3. 步骤三",
                    "预期结果": "每一步操作对应的明确可验证的预期结果",
                    "实际结果": "",
                    "测试状态": "待执行",
                    "备注": "特殊说明,无则为空"
                }}
            ]
        }}
        6.  团队自定义规则:{custom_rules if custom_rules else "无额外自定义规则,遵循软件测试行业通用最佳实践"}
        """

        # 构建用户提示词,传入PRD全量内容
        prompt = f"请基于以下PRD产品需求文档,生成完整的功能测试用例,严格按照要求输出结构化JSON结果。PRD内容:\n{prd_content}"

        # 调用4SAPI接口生成用例
        result_json = call_4sapi_llm(prompt, system_prompt, model=model)
        if not result_json:
            print(f"需求文档 {file_name} 用例生成失败,接口无返回内容")
            return []
        
        # 解析JSON结果
        result_data = json.loads(result_json)
        test_cases = result_data.get("test_cases", [])
        print(f"功能测试用例生成完成,共生成用例:{len(test_cases)}个")
        return test_cases
    
    except json.JSONDecodeError:
        print(f"需求文档 {Path(prd_path).name} 用例生成失败,输出内容非标准JSON格式")
        return []
    except Exception as e:
        print(f"需求文档 {Path(prd_path).name} 用例生成失败:{str(e)}")
        return []

3.2.2 接口文档自动化测试用例 + 脚本生成

针对后端开发与接口测试场景,我们封装接口测试用例生成功能,支持 Swagger/OpenAPI 文档解析,同时生成可直接运行的 pytest 自动化脚本,大幅降低接口测试的开发成本。

python

运行

def generate_interface_test_cases(swagger_path: str, model: str = None) -> tuple[list, str]:
    """
    基于Swagger/OpenAPI接口文档生成接口测试用例与自动化测试脚本
    :param swagger_path: Swagger/OpenAPI文档路径,支持yaml/json格式
    :param model: 指定使用的模型,不指定则自动调度最优模型
    :return: 元组(接口测试用例列表,pytest自动化脚本代码)
    """
    try:
        # 读取接口文档内容
        swagger_path = Path(swagger_path)
        if not swagger_path.exists():
            raise FileNotFoundError(f"接口文档不存在:{swagger_path}")
        
        file_suffix = swagger_path.suffix.lower()
        if file_suffix in [".yaml", ".yml"]:
            with open(swagger_path, "r", encoding="utf-8") as f:
                swagger_content = yaml.safe_load(f)
            swagger_text = yaml.dump(swagger_content, allow_unicode=True)
        elif file_suffix == ".json":
            swagger_content = json.loads(swagger_path.read_text(encoding="utf-8"))
            swagger_text = json.dumps(swagger_content, ensure_ascii=False, indent=2)
        else:
            raise ValueError(f"不支持的接口文档格式:{file_suffix},仅支持yaml/json格式")
        
        print(f"正在解析接口文档:{swagger_path.name}")
        # 自动调度模型
        if not model:
            model = MODEL_CAPABILITY_MAP["interface_test"]
        print(f"本次使用生成模型:{model}")

        # 第一步:生成接口测试用例
        system_prompt_case = f"""
        你是一位资深的接口测试专家,精通RESTful API测试规范,擅长设计高覆盖率的接口测试用例。
        你的任务是基于用户提供的Swagger/OpenAPI接口文档,生成标准化的接口测试用例,严格遵循以下要求:
        1.  用例必须覆盖文档中的所有接口,每个接口必须覆盖:正常请求场景、参数校验场景、异常返回场景、权限校验场景、边界值场景
        2.  严格按照指定的标准字段输出,测试步骤清晰可执行,预期结果明确,包含接口地址、请求方式、请求参数、响应码校验等核心信息
        3.  必须输出标准JSON格式,结构与功能测试用例一致,外层key为test_cases,数组内为每个接口的测试用例
        """
        prompt_case = f"请基于以下Swagger接口文档,生成完整的接口测试用例,严格按照要求输出JSON结果。接口文档:\n{swagger_text}"
        result_json_case = call_4sapi_llm(prompt_case, system_prompt_case, model=model)
        test_cases = json.loads(result_json_case).get("test_cases", []) if result_json_case else []
        print(f"接口测试用例生成完成,共生成用例:{len(test_cases)}个")

        # 第二步:生成pytest自动化测试脚本
        system_prompt_script = f"""
        你是一位资深的自动化测试开发工程师,精通Python+pytest接口自动化测试框架。
        你的任务是基于用户提供的Swagger接口文档,生成可直接运行的pytest自动化测试脚本,严格遵循以下要求:
        1.  脚本必须覆盖文档中的所有接口,每个接口至少包含正常请求、参数异常、权限异常3个测试用例
        2.  代码必须符合Python编码规范,使用requests库发送请求,使用pytest框架组织用例,结构清晰,注释完整
        3.  必须包含配置项、公共请求方法、接口测试用例、断言逻辑,可直接运行,无语法错误
        4.  直接输出完整的Python代码,不要返回任何额外的解释、说明、markdown格式
        """
        prompt_script = f"请基于以下Swagger接口文档,生成完整的pytest接口自动化测试脚本,严格按照要求输出代码。接口文档:\n{swagger_text}"
        # 脚本生成使用DeepSeek-V4 Lite,代码生成能力专精
        test_script = call_4sapi_llm(prompt_script, system_prompt_script, model=MODEL_CAPABILITY_MAP["unit_test"])
        print("接口自动化测试脚本生成完成")

        return test_cases, test_script
    
    except Exception as e:
        print(f"接口文档 {swagger_path.name} 处理失败:{str(e)}")
        return [], ""

3.2.3 代码文件单元测试用例生成

针对开发工程师的单元测试需求,封装单元测试代码生成功能,支持主流开发语言,自动解析代码逻辑,生成可直接运行的单元测试代码,全量覆盖代码分支。

python

运行

def generate_unit_test_code(code_file_path: str, model: str = None) -> str:
    """
    基于代码文件生成对应的单元测试代码
    :param code_file_path: 代码文件路径
    :param model: 指定使用的模型,不指定则自动调度最优模型
    :return: 生成的单元测试代码
    """
    try:
        # 加载代码文件
        code_path = Path(code_file_path)
        if not code_path.exists():
            raise FileNotFoundError(f"代码文件不存在:{code_path}")
        
        file_suffix = code_path.suffix.lower()
        if file_suffix not in SUPPORTED_LANGUAGES:
            raise ValueError(f"不支持的代码文件格式:{file_suffix}")
        
        language = SUPPORTED_LANGUAGES[file_suffix]
        code_content = code_path.read_text(encoding="utf-8")
        file_name = code_path.name
        print(f"正在解析代码文件:{file_name}")

        # 自动调度模型,单元测试用DeepSeek-V4 Lite,代码理解专精
        if not model:
            model = MODEL_CAPABILITY_MAP["unit_test"]
        print(f"本次使用生成模型:{model}")

        # 构建系统提示词
        system_prompt = f"""
        你是一位资深的{language}开发工程师与单元测试专家,精通{language}主流单元测试框架。
        你的任务是基于用户提供的{language}代码,生成完整的、可直接运行的单元测试代码,严格遵循以下要求:
        1.  测试代码必须100%覆盖原代码的所有函数、类、分支逻辑、异常处理场景、边界条件
        2.  必须使用{language}官方推荐的主流单元测试框架:Python用pytest,Java用JUnit 5,Go用内置testing包,JS/TS用Jest
        3.  代码必须符合对应语言的编码规范,注释完整,结构清晰,包含正常场景、异常场景、边界场景的测试用例
        4.  直接输出完整的单元测试代码,不要返回任何额外的解释、说明、markdown格式,确保可直接运行无语法错误
        """

        # 构建用户提示词
        prompt = f"请为以下{language}代码生成完整的单元测试代码,严格按照要求输出。代码内容:\n```\n{code_content}\n```"

        # 调用4SAPI接口生成单元测试代码
        unit_test_code = call_4sapi_llm(prompt, system_prompt, model=model)
        if not unit_test_code:
            print(f"代码文件 {file_name} 单元测试生成失败,接口无返回内容")
            return ""
        
        print(f"单元测试代码生成完成,可直接运行")
        return unit_test_code
    
    except Exception as e:
        print(f"代码文件 {code_path.name} 单元测试生成失败:{str(e)}")
        return ""

3.3 多模型交叉生成与批量处理功能

针对核心业务场景,我们封装多模型交叉生成功能,并行调用多个顶尖模型,互相补充测试场景,避免遗漏,同时支持批量文件处理,适配大型项目的全量用例生成需求。

python

运行

def multi_model_cross_generate_test_cases(prd_path: str, custom_rules: str = None) -> list:
    """
    多模型交叉生成测试用例,调用GPT-5.4、Claude 4.6、Qwen3.5-Plus做交叉补充,最大化场景覆盖率
    :param prd_path: 需求文档路径
    :param custom_rules: 团队自定义规范
    :return: 合并后的全量测试用例列表
    """
    try:
        prd_content = read_prd_document(prd_path)
        file_name = Path(prd_path).name
        print(f"开始多模型交叉生成测试用例,文档:{file_name}")
        print("本次参与生成模型:GPT-5.4、Claude 4.6、Qwen3.5-Plus")

        # 定义每个模型的生成侧重点
        model_config = [
            {
                "model": "GPT-5.4",
                "focus": "核心业务流程、系统集成场景、全链路测试用例",
                "prompt_suffix": "重点关注核心业务流程的完整性、跨模块集成场景、全链路业务闭环的测试用例设计"
            },
            {
                "model": "Claude 4.6",
                "focus": "异常场景、边界条件、细节分支场景",
                "prompt_suffix": "重点关注异常流程、边界条件、极端数据场景、细节分支逻辑的测试用例设计,不放过任何一个边缘场景"
            },
            {
                "model": "Qwen3.5-Plus",
                "focus": "合规场景、权限控制、数据安全场景",
                "prompt_suffix": "重点关注权限控制、数据安全、合规性要求、用户隐私保护相关的测试用例设计,贴合国内合规要求"
            }
        ]

        # 并行调用多个模型生成用例
        all_case_results = []
        for config in model_config:
            print(f"正在调用 {config['model']} 生成{config['focus']}用例...")
            system_prompt = f"""
            你是一位资深测试专家,专精{config['focus']}。
            你的任务是基于PRD需求文档生成测试用例,{config['prompt_suffix']}
            必须输出标准JSON格式,外层key为test_cases,结构与标准功能测试用例一致。
            自定义规则:{custom_rules if custom_rules else "无"}
            """
            prompt = f"基于以下PRD文档生成测试用例:\n{prd_content}"
            result_json = call_4sapi_llm(prompt, system_prompt, model=config["model"])
            if result_json:
                try:
                    cases = json.loads(result_json).get("test_cases", [])
                    all_case_results.append({"model": config["model"], "cases": cases})
                except:
                    print(f"{config['model']} 用例生成解析失败,已跳过")
                    continue

        # 合并去重,基于用例名称与测试点去重
        print("正在合并多模型生成的用例...")
        merged_cases = []
        unique_case_key = set()
        for model_result in all_case_results:
            for case in model_result["cases"]:
                unique_key = f"{case['所属模块']}_{case['用例名称']}"
                if unique_key not in unique_case_key:
                    unique_case_key.add(unique_key)
                    merged_cases.append(case)
        
        print(f"多模型交叉生成完成,最终合并用例总数:{len(merged_cases)}个")
        return merged_cases
    
    except Exception as e:
        print(f"多模型交叉生成失败:{str(e)}")
        return []

3.4 工具入口封装

最后,我们封装简单的调用入口,用户只需修改配置项,即可一键执行对应场景的用例生成,无需修改核心代码:

python

运行

if __name__ == "__main__":
    # ------------------------------ 自定义配置区 ------------------------------
    # 1. 生成模式选择:
    # functional-功能测试用例生成、interface-接口测试用例+脚本生成、unit-单元测试代码生成、cross-多模型交叉生成
    GENERATE_MODE = "functional"
    # 2. 输入文件路径:对应模式的PRD文档/接口文档/代码文件路径
    INPUT_FILE_PATH = "./产品需求文档.docx"
    # 3. 输出文件路径
    OUTPUT_EXCEL_PATH = "./测试用例/功能测试用例.xlsx"
    OUTPUT_MD_PATH = "./测试用例/功能测试用例.md"
    OUTPUT_SCRIPT_PATH = "./测试用例/接口自动化测试脚本.py"
    OUTPUT_UNIT_TEST_PATH = "./测试用例/test_单元测试.py"
    # 4. 团队自定义测试规范(可选)
    CUSTOM_RULES = """
    1.  测试优先级严格遵循:P0核心主流程100%覆盖,P1重要分支场景100%覆盖
    2.  所有用户输入相关的功能,必须包含SQL注入、XSS跨站脚本相关的安全测试用例
    3.  所有涉及用户权限的功能,必须包含越权访问、未授权访问的测试用例
    4.  用例步骤必须清晰,每一步只包含一个操作,预期结果可量化、可验证
    """
    # 5. 指定生成模型(可选,不填则自动调度最优模型)
    CUSTOM_MODEL = None
    # -------------------------------------------------------------------------

    # 自动创建输出目录
    Path(OUTPUT_EXCEL_PATH).parent.mkdir(parents=True, exist_ok=True)

    # 执行对应生成模式
    if GENERATE_MODE == "functional":
        test_cases = generate_functional_test_cases(
            prd_path=INPUT_FILE_PATH,
            custom_rules=CUSTOM_RULES,
            model=CUSTOM_MODEL
        )
        if test_cases:
            export_test_cases_to_excel(test_cases, OUTPUT_EXCEL_PATH)
            export_test_cases_to_markdown(test_cases, OUTPUT_MD_PATH, title="功能测试用例文档")
    
    elif GENERATE_MODE == "interface":
        test_cases, test_script = generate_interface_test_cases(
            swagger_path=INPUT_FILE_PATH,
            model=CUSTOM_MODEL
        )
        if test_cases:
            export_test_cases_to_excel(test_cases, OUTPUT_EXCEL_PATH)
            export_test_cases_to_markdown(test_cases, OUTPUT_MD_PATH, title="接口测试用例文档")
        if test_script:
            Path(OUTPUT_SCRIPT_PATH).write_text(test_script, encoding="utf-8")
            print(f"接口自动化脚本已保存至:{OUTPUT_SCRIPT_PATH}")
    
    elif GENERATE_MODE == "unit":
        unit_test_code = generate_unit_test_code(
            code_file_path=INPUT_FILE_PATH,
            model=CUSTOM_MODEL
        )
        if unit_test_code:
            Path(OUTPUT_UNIT_TEST_PATH).write_text(unit_test_code, encoding="utf-8")
            print(f"单元测试代码已保存至:{OUTPUT_UNIT_TEST_PATH}")
    
    elif GENERATE_MODE == "cross":
        test_cases = multi_model_cross_generate_test_cases(
            prd_path=INPUT_FILE_PATH,
            custom_rules=CUSTOM_RULES
        )
        if test_cases:
            export_test_cases_to_excel(test_cases, OUTPUT_EXCEL_PATH)
            export_test_cases_to_markdown(test_cases, OUTPUT_MD_PATH, title="多模型交叉生成测试用例文档")
    
    else:
        print("错误:不支持的生成模式,请选择functional/interface/unit/cross")

四、工具使用与效果演示

4.1 基础使用步骤

  1. 完成.env文件配置,填入自己的 4SAPI 密钥,确保配置正确无误
  2. test_case_generator.py文件的__main__自定义配置区,选择生成模式,配置输入文件路径与输出路径
  3. 可选配置团队自定义测试规范,适配团队内部的测试管理要求
  4. 执行脚本,即可自动完成测试用例 / 自动化脚本生成,并导出对应文件:

bash

运行

python test_case_generator.py

4.2 实际效果演示

以一段简单的用户登录功能 PRD 需求为例,工具生成的核心测试用例如下:

表格

用例 ID用例名称所属模块测试优先级测试类型前置条件测试步骤预期结果
TC_LOGIN_001正确的账号密码登录成功用户登录模块P0功能测试1. 系统正常运行;2. 测试账号已注册,账号:test,密码:Test@1234561. 进入系统登录页面;2. 输入正确的账号 test;3. 输入正确的密码 Test@123456;4. 点击登录按钮1. 登录请求发送成功;2. 系统校验账号密码正确;3. 成功跳转到系统首页;4. 登录态正常生效
TC_LOGIN_002账号正确密码错误登录失败用户登录模块P1异常测试1. 系统正常运行;2. 测试账号已注册,账号:test,密码:Test@1234561. 进入系统登录页面;2. 输入正确的账号 test;3. 输入错误的密码 Test@123;4. 点击登录按钮1. 登录请求发送成功;2. 系统返回密码错误提示;3. 页面停留在登录页,不发生跳转;4. 登录态不生效
TC_LOGIN_003账号不存在登录失败用户登录模块P1异常测试1. 系统正常运行;2. 系统中无账号:nonexist1. 进入系统登录页面;2. 输入不存在的账号 nonexist;3. 输入任意密码;4. 点击登录按钮1. 登录请求发送成功;2. 系统返回账号不存在提示;3. 页面停留在登录页,不发生跳转
TC_LOGIN_004空账号空密码登录校验用户登录模块P1边界测试1. 系统正常运行;2. 登录页面正常加载1. 进入系统登录页面;2. 账号输入框不输入任何内容;3. 密码输入框不输入任何内容;4. 点击登录按钮1. 登录请求不发送;2. 页面提示账号不能为空、密码不能为空;3. 登录按钮置灰不可点击
TC_LOGIN_005密码输入 SQL 注入语句拦截用户登录模块P1安全测试1. 系统正常运行;2. 测试账号已注册,账号:test1. 进入系统登录页面;2. 输入账号 test;3. 输入密码:' OR 1=1 -- ; 4. 点击登录按钮1. 系统拦截非法请求;2. 返回参数非法提示;3. 登录失败,无法绕过账号密码校验

生成的用例完全符合测试管理平台的导入标准,可直接导入禅道、Jira 使用,同时自动化脚本可直接运行,无需二次修改。

五、进阶优化与企业级落地方案

基于上述基础版本,我们可以快速扩展更多企业级能力,依托 4SAPI 的全量模型兼容能力,无需大幅修改核心代码,即可实现能力升级:

  1. CI/CD 流水线集成:将工具集成到 GitLab CI、GitHub Actions、Jenkins 中,代码提交时自动生成单元测试用例,接口发布时自动生成接口测试用例,实现测试左移
  2. 测试管理平台对接:对接禅道、Jira、TestLink 等测试管理平台,生成的用例自动同步到平台中,无需手动导入导出,实现测试流程全闭环
  3. 多模态原型图解析:基于 Gemini 3.1 Pro 的多模态能力,扩展产品原型图、UI 设计稿解析能力,无需手动整理 PRD,直接上传原型图即可生成前端交互测试用例
  4. 自动化测试执行与报告生成:扩展自动化脚本执行能力,自动运行生成的测试脚本,输出可视化测试报告,同步测试结果到测试管理平台
  5. 私有化部署适配:4SAPI 支持私有化部署,可对接企业内部的大模型服务、代码仓库、需求管理平台,实现全流程内网闭环,满足企业数据安全与合规要求
  6. 用例覆盖率统计:对接代码覆盖率工具,自动统计生成的单元测试用例的代码分支覆盖率,优化用例设计,保证测试有效性

六、常见问题与踩坑排查

6.1 4SAPI 接口调用失败解决方案

这是最常见的问题,核心排查步骤如下:

  1. 核对配置信息:严格确认.env文件中的OPENAI_BASE_URLhttps://4sapi.com/v1,无拼写错误、多余空格、中文符号,API Key 与控制台生成的完全一致
  2. 关闭本地代理:4SAPI 为国内直连节点,无需配置任何系统代理 / VPN,开启代理可能会导致路由冲突,关闭后即可恢复正常访问
  3. 检查账号状态:确认 4SAPI 账号内有可用的调用额度,额度耗尽会导致接口调用失败,可在控制台实时查看额度使用情况
  4. 校验模型名称:确认使用的模型名称与 4SAPI 控制台模型文档中的名称完全一致,本次使用的 GPT-5.4、Gemini 3.1 Pro、Claude 4.6、DeepSeek-V4 Lite、Qwen3.5-Plus 均已全量支持,可直接调用

6.2 其他常见问题

  1. 超长 PRD 文档提示 token 超限:针对超长篇需求文档,工具已默认调度 Claude 4.6 模型(超长上下文窗口支持),若仍出现 token 超限,可将 PRD 按功能模块拆分,分模块生成测试用例
  2. 用例生成结果 JSON 解析失败 **:已通过response_format强制模型输出 JSON 格式,若仍出现解析失败,可降低TEMPERATURE值,进一步约束模型输出,同时优化自定义规则的描述,明确输出格式要求
  3. 自动化脚本无法运行 **:生成的脚本已严格遵循对应语言的编码规范,若出现运行报错,可检查接口文档的完整性,补充接口的请求参数、响应格式、域名配置等信息,重新生成即可
  4. 单元测试代码与原代码不匹配 **:确保代码文件无语法错误,可正常运行,同时可指定使用 GPT-5.4 模型生成,提升代码逻辑理解的准确性,适配复杂业务代码的单元测试生成

七、总结

本文从零到一开发了一款覆盖功能测试、接口测试、单元测试全场景的 AI 自动化测试用例生成工具,解决了研发团队在测试环节的核心痛点,所有代码均可直接复用,高度可定制,无论是个人开发者快速生成单元测试,还是企业级测试团队批量生成全量测试用例,都能快速适配。

整个开发过程中,我们可以清晰看到 4SAPI 给测试效能提升带来的核心价值:一套密钥、一次接入、全量最新模型无缝调用。无需对接多个厂商的 SDK、无需申请多套密钥、无需处理跨境网络问题、无需为新模型发布重新适配代码,只需专注于测试业务本身,就能快速开发出基于顶尖大模型能力的测试效能工具。

对于个人开发者和企业研发测试团队而言,选用 4SAPI 作为大模型接入层,不仅能大幅降低开发与运维成本,还能第一时间解锁全球最新版本的大模型能力,用 AI 真正提升测试效率与用例覆盖率,从源头保障产品质量与线上系统稳定性。