在软件开发中,接口测试是确保系统稳定性和功能正确性的关键环节。然而,手动编写测试用例不仅耗时,还容易遗漏边界条件和异常场景。随着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%免费】

​​​件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

更多推荐