📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


在软件开发中,接口测试是确保系统稳定性和功能正确性的关键环节。然而,手动编写测试用例不仅耗时,还容易遗漏边界条件和异常场景。随着AI技术的进步,特别是大模型和LangChain的应用,我们可以实现接口测试用例的自动化生成,大幅提升测试效率和质量。本文将介绍如何构建一个基于AI的接口测试用例生成工具。


一、背景与挑战

在复杂的软件系统中,接口数量庞大,测试用例的编写和维护成本极高。传统的手动测试方法存在以下问题:

  1. 耗时费力:手动编写测试用例需要大量时间和精力。

  2. 覆盖不全:难以覆盖所有边界条件和异常场景。

  3. 维护困难:随着接口的变更,测试用例需要频繁更新。

为了解决这些问题,我们引入了AI技术,结合LangChain和大模型,实现接口测试用例的自动化生成。


二、技术栈与工具

1. LangChain

LangChain是一个强大的框架,用于构建基于大模型的应用程序。它支持多种功能,包括对话管理、工具调用和结构化输出生成。

2. OpenAI

OpenAI提供了强大的语言模型(如Deepseek,QWEN,GPT),能够理解自然语言并生成高质量的文本内容。

3. Pydantic

Pydantic是一个数据验证库,用于定义和验证数据模型,确保生成的数据符合预期格式。


三、解决方案概述

我们的解决方案基于AI技术自动生成接口测试用例。以下是核心功能:

  1. 接口文档解析:读取接口文档(如JSON文件),提取接口路径、请求方法、参数和响应信息。

  2. 测试用例生成:利用大模型生成覆盖正常、边界和异常场景的测试用例。

  3. 结构化输出:将生成的测试用例转换为Pydantic模型,确保数据格式正确。

  4. Excel导出:将测试用例导出为Excel文件,便于测试人员使用。


四、技术实现

1. 接口文档解析

通过读取JSON格式接口文档,并将其解析为结构化的数据:

def load_api_info(file_path: str) -> APIInfo:
    with open(file_path, 'r') as file:
        data = json.load(file)
    return APIInfo(**data)

2. 测试用例生成

调用大模型生成测试用例。通过generate_test_case_prompt函数构造提示词,并利用LangChain的ChatOpenAI模型生成测试用例:

def generate_test_case_prompt(api_info: APIInfo) -> str:
    """ 生成提示词,要求模型返回符合结构化的JSON """
    prompt = f"""
    请为{api_info.summary}设计接口测试用例,需要考虑每个参数边界值,异常值和参数组合关系,接口信息如下:  
    1. 接口信息:  
       - 方法:{api_info.method}
       - 路径:{api_info.path}
    2. 测试目标:  
       - 核心功能:{api_info.description}
       - 测试类型:功能测试、安全性测试、异常测试、边界值测试  
    3. 参数要求:  
       - 必填参数:{[{param.name:param.description} for param in api_info.parameters if param.required]}
       - 非必填参数: {[{param.name:param.description} for param in api_info.parameters if not param.required]}
       - 需覆盖场景:  
         - 正常值:符合要求的参数
         - 边界值: 范围之内和范围之外的值
         - 异常值:参数为空,非法值
    4. 预期结果:  
       - 成功:状态码200,返回有效Token及过期时间  
       - 失败:{api_info.responses}
    """
    return prompt


def call_large_model(prompt: str):
    """调用大模型并解析结果"""
    client = ChatOpenAI(
        model=os.getenv('DEEPSEEK_MODEL'),
        api_key=os.getenv('DEEPSEEK_API_KEY'),
        base_url=os.getenv('DEEPSEEK_URL'),
        temperature=0.2
    )
    function_definition = create_function_definition(TestCase)
    bound_client = client.bind_tools([function_definition])
    response = bound_client.invoke([HumanMessage(content=prompt)])
    return response

3. 结构化输出

定义了TestCaseTestCaseInputTestCaseOutput等Pydantic模型,用于验证和存储生成的测试用例:

class TestCase(BaseModel):
    """测试用例模型"""
    case_id: str = Field(..., description="用例唯一标识(如 'TC001')")
    api_id: str = Field(..., description="关联接口的 interface_id")
    name: str = Field(..., description="用例名称(如 '测试创建用户成功')")
    description: str = Field("", description="用例描述")
    input: TestCaseInput = Field(..., description="输入参数")
    expected_output: TestCaseOutput = Field(..., description="预期输出")

4. Excel导出

将生成的测试用例导出为Excel文件,并合并相同项的单元格:

def create_excel_from_cases(test_cases: List[TestCase], api_info: APIInfo, excel_path:str)->None:

    test_cases_df = []
    for test_case in test_cases:
        # 将APIInfo的信息与每个测试用例相结合
        input_str = ''
        if test_case.input.body:
            input_str += f'Body:{str(test_case.input.body)}\n'
        if test_case.input.query_params:
            input_str += f'query:{str(test_case.input.query_param)}'
        combined_data = {
            'case_id': test_case.case_id,
            'Interface ID': api_info.interface_id,
            'Path': api_info.path,
            'Method': api_info.method,
            'Summary': api_info.summary,
            'Name': test_case.name,
            'Description': test_case.description,
            'Input': input_str,
            'Expected Output': str(test_case.expected_output.response_content.model_dump_json())
        }
        test_cases_df.append(combined_data)

    # 创建DataFrame
    df = pd.DataFrame(test_cases_df)

5. 结果展示

接口提示词

接口测试用例


五、应用场景

1. API开发与测试

在API开发过程中,实时生成测试用例,确保每个新添加的API都被充分测试。

2. 持续集成/持续部署(CI/CD)

将AI生成的测试用例集成到CI/CD流程中,实现自动化测试,加快软件发布周期。

3. 回归测试

在代码变更后,快速生成新的测试用例,进行回归测试,确保现有功能不受影响。


六、优势与价值

  1. 提高测试效率:自动化生成测试用例大幅减少了手动编写的时间。

  2. 增强测试覆盖:AI能够生成更多样化的测试场景,包括一些人类可能忽略的边界条件。

  3. 降低成本:减少人工测试错误和疏漏,降低了因质量问题导致的修复成本。


七、总结与展望

通过结合大模型和LangChain,我们成功实现了接口测试用例的自动化生成,这不仅提高了测试效率,还增强了测试覆盖范围和质量。未来,我们将继续探索AI在软件测试领域的应用,为开发者和测试人员带来更多便捷和效率提升。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述​​
在这里插入图片描述​​

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐