Swagger+LangChain实战:5步搞定AI自动生成接口测试脚本(附完整代码)
SwaggerLangChain实战5步构建AI驱动的接口测试自动化流水线在当今快速迭代的软件开发环境中接口测试自动化已成为保障产品质量的关键环节。传统手工编写测试脚本的方式不仅效率低下还难以应对频繁变更的接口需求。本文将介绍如何利用Swagger文档解析与LangChain技术栈构建一套智能化的接口测试脚本生成系统实现从接口文档到可执行测试代码的全自动转换。1. 环境准备与工具链配置在开始之前我们需要搭建一个稳定可靠的开发环境。以下是核心组件及其作用Python 3.8作为基础编程语言环境Requests库用于获取Swagger JSON数据LangChain框架构建AI处理流水线的核心工具pytest测试框架最终生成的测试脚本运行环境配置基础环境的命令如下# 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows # 安装依赖包 pip install requests langchain openai pytest提示建议使用PyCharm或VS Code作为开发IDE它们对Python生态有很好的支持能提供代码补全和调试功能。2. Swagger文档解析与关键信息提取Swagger文档通常以JSON格式提供接口的完整描述我们的第一步是从中提取出测试所需的关键信息。这包括接口路径、请求方法、参数定义以及响应模型。以下是一个典型的Swagger JSON结构示例{ swagger: 2.0, info: { title: 电商平台API, version: 1.0.0 }, paths: { /products: { get: { summary: 获取商品列表, parameters: [...], responses: { 200: { schema: { $ref: #/definitions/ProductList } } } } } }, definitions: { ProductList: { type: object, properties: {...} } } }我们需要编写专门的解析器来提取这些信息def parse_swagger(swagger_json): 解析Swagger文档提取接口测试所需的关键信息 :param swagger_json: Swagger文档的JSON对象 :return: 结构化接口信息字典 result { basePath: swagger_json.get(basePath, ), interfaces: [], models: swagger_json.get(definitions, {}) } for path, methods in swagger_json.get(paths, {}).items(): for method, details in methods.items(): if method.lower() not in [get, post, put, delete]: continue interface { path: path, method: method.upper(), summary: details.get(summary, ), parameters: details.get(parameters, []), responses: details.get(responses, {}) } result[interfaces].append(interface) return result3. LangChain提示工程设计与优化LangChain的强大之处在于其链式处理能力我们可以设计多个专门的提示模板让AI逐步完成从接口文档到测试脚本的转换。3.1 接口需求文档生成提示from langchain.prompts import PromptTemplate req_doc_prompt PromptTemplate( input_variables[swagger_data], template 你是一位专业的API文档工程师请根据提供的Swagger接口信息 生成详细的接口需求文档。要求 1. 每个接口单独一个章节 2. 包含完整的请求参数说明 3. 包含响应数据结构说明 4. 使用Markdown格式输出 Swagger接口信息 {swagger_data} )3.2 测试用例生成提示test_case_prompt PromptTemplate( input_variables[api_doc], template 根据以下API文档设计全面的测试用例 1. 正向测试用例有效输入 2. 边界值测试用例 3. 异常测试用例无效输入 4. 安全性测试用例 对每个测试用例需明确 - 测试目的 - 输入参数 - 预期结果 API文档 {api_doc} )3.3 自动化脚本生成提示auto_script_prompt PromptTemplate( input_variables[test_cases], template 根据以下测试用例使用pytest框架编写自动化测试脚本。 要求 1. 使用requests库发送HTTP请求 2. 实现参数化测试 3. 包含合理的断言 4. 支持Allure测试报告 测试用例 {test_cases} )4. 构建端到端的处理流水线将上述组件串联起来形成一个完整的自动化处理链from langchain.chains import SequentialChain from langchain.llms import OpenAI # 初始化LLM llm OpenAI(temperature0.3) # 构建处理链 processing_chain SequentialChain( chains[ LLMChain(llmllm, promptreq_doc_prompt, output_keyapi_doc), LLMChain(llmllm, prompttest_case_prompt, output_keytest_cases), LLMChain(llmllm, promptauto_script_prompt, output_keytest_scripts) ], input_variables[swagger_data], output_variables[test_scripts], verboseTrue ) # 执行整个流水线 def generate_test_scripts(swagger_url): # 获取Swagger JSON swagger_json requests.get(swagger_url).json() # 解析关键信息 parsed_data parse_swagger(swagger_json) # 运行处理链 result processing_chain.run({ swagger_data: json.dumps(parsed_data, indent2) }) return result[test_scripts]5. 测试脚本的落地与优化生成的测试脚本需要进一步优化以适应实际项目需求。以下是几个关键优化点5.1 脚本结构优化典型的测试目录结构应包含tests/ ├── conftest.py # 公共fixture ├── test_apis/ # API测试脚本 ├── data/ # 测试数据 └── reports/ # 测试报告5.2 公共功能封装将通用功能封装成工具函数# tests/conftest.py import pytest import requests pytest.fixture def api_client(): class APIClient: def __init__(self, base_url): self.base_url base_url def request(self, method, endpoint, **kwargs): url f{self.base_url}{endpoint} return requests.request(method, url, **kwargs) return APIClient(https://api.example.com)5.3 参数化测试示例# tests/test_apis/test_products.py import pytest pytest.mark.parametrize(product_id,expected_status, [ (123, 200), (invalid_id, 400), (, 404) ]) def test_get_product(api_client, product_id, expected_status): response api_client.request( GET, f/products/{product_id} ) assert response.status_code expected_status5.4 Allure报告集成# pytest.ini [pytest] addopts --alluredir./reports# 生成报告 pytest tests/ allure serve ./reports通过以上五个步骤我们建立了一个完整的AI驱动接口测试自动化流水线。这套方案不仅能大幅提升测试脚本的开发效率还能确保测试覆盖的全面性。在实际项目中可以根据具体需求调整各环节的提示词和代码模板使其更贴合团队的技术栈和测试规范。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2437995.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!