大模型应用之基于Langchain的测试用例生成

一 用例生成实践效果

在***组内的日常***工作安排中,持续优化测试技术、提高测试效率始终是重点任务。近期,我们在探索实践使用大模型生成测试用例,期望能够借助其强大的自然语言处理能力,自动化地生成更全面和高质量的测试用例。

当前,公司已经普及使用JoyCoder,我们可以拷贝相关需求及设计文档的信息给到JoyCoder,让其生成测试用例,但在使用过程中有以下痛点:

1)仍需要多步人工操作:如复制粘贴文档,编写提示词,拷贝结果,保存用例等

2)响应时间久,结果不稳定:当需求或设计文档内容较大时,提示词太长或超出token限制

因此,我探索了基于Langchain与公司现有平台测试用例可以自动、快速、稳定生成的方法,效果如下:

用例生成效果对比 使用JoyCoder 基于Langchain自研
生成时长 (针对项目–文档内容较多) ·10~20分钟左右,需要多次人工操作 (先会有一个提示:根据您提供的需求文档,下面是一个Markdown格式的测试用例示例。由于文档内容比较多,我将提供一个概括性的测试用例模板,您可以根据实际需求进一步细化每个步骤。) ·内容太多时,报错:The maximum default token limit has been reached、UNKNOWN ERROR:Request timed out. This may be due to the server being overloaded,需要人工尝试输入多少内容合适 ·5分钟左右自动生成 (通过摘要生成全部测试点后,再通过向量搜索的方式生成需要细化的用例) ·内容太多时,可根据token文本切割后再提供给大模型
生成时长 (针对普通小需求) 差别不大,1~5分钟
准确度 依赖提示词内容,差别不大,但自研时更方便给优化好的提示词固化下来

(什么是LangChain? 它是一个开源框架,用于构建基于大型语言模型(LLM)的应用程序。LLM 是基于大量数据预先训练的大型深度学习模型,可以生成对用户查询的响应,例如回答问题或根据基于文本的提示创建图像。LangChain 提供各种工具和抽象,以提高模型生成的信息的定制性、准确性和相关性。例如,开发人员可以使用 LangChain 组件来构建新的提示链或自定义现有模板。LangChain 还包括一些组件,可让 LLM 无需重新训练即可访问新的数据集。)

二 细节介绍

1 基于Langchain的测试用例生成方案

方案 优点 缺点 适用场景
方案1:将全部产品需求和研发设计文档给到大模型,自动生成用例 用例内容相对准确 不支持特大文档,容易超出token限制 普通规模的需求及设计
方案2:将全部产品需求和研发设计文档进行摘要后,将摘要信息给到大模型,自动生成用例 进行摘要后无需担心token问题 用例内容不准确,大部分都只能是概况性的点 特大规模的需求及设计
方案3:将全部产品需求和研发设计文档存入向量数据库,通过搜索相似内容, 自动生成某一部分的测试用例 用例内容更聚焦 无需担心token问题 不是全面的用例 仅对需求及设计中的某一部分进行用例生成

因3种方案使用场景不同,优缺点也可互补,故当前我将3种方式都实现了,提供大家按需调用。

2 实现细节

2.1 整体流程

img

2.2 技术细节说明

pdf内容解析: :Langchain支持多种文件格式的解析,如csv、json、html、pdf等,而pdf又有很多不同的库可以使用,本次我选择PyMuPDF,它以功能全面且处理速度快为优势

文件切割处理: 为了防止一次传入内容过多,容易导致大模型响应时间久或超出token限制,利用Langchain的文本切割器,将文件分为各个小文本的列表形式

Memory的使用: 大多数 LLM 模型都有一个会话接口,当我们使用接口调用大模型能力时,每一次的调用都是新的一次会话。如果我们想和大模型进行多轮的对话,而不必每次重复之前的上下文时,就需要一个Memory来记忆我们之前的对话内容。Memory就是这样的一个模块,来帮助开发者可以快速的构建自己的应用“记忆”。本次我使用Langchain的ConversationBufferMemory与ConversationSummaryBufferMemory来实现,将需求文档和设计文档内容直接存入Memory,可减少与大模型问答的次数(减少大模型网关调用次数),提高整体用例文件生成的速度。ConversationSummaryBufferMemory主要是用在提取“摘要”信息的部分,它可以将将需求文档和设计文档内容进行归纳性总结后,再传给大模型

向量数据库: 利用公司已有的向量数据库测试环境Vearch,将文件存入。 在创建数据表时,需要了解向量数据库的检索模型及其对应的参数,目前支持六种类型,IVFPQ,HNSW,GPU,IVFFLAT,BINARYIVF,FLAT(详细区别和参数可点此链接),目前我选择了较为基础的IVFFLAT–基于量化的索引,后续如果数据量太大或者需要处理图数据时再优化。另外Langchai

### 如何使用LangChain和DeepSeek生成测试用例 #### 准备工作 为了实现这一目标,首先需要安装必要的库文件。确保环境中已安装`langchain`以及`deepseek`相关的包。 ```bash pip install langchain deepseek-client milvus ``` #### 初始化环境配置 创建一个Python脚本,在其中初始化Milvus连接,并加载所需的DeepSeek模型实例[^3]。 ```python from langchain import LangChain import deepseek_client as ds_client milvus_host = 'localhost' milvus_port = 19530 model_name = 'deepseek-R1' client = ds_client.connect(milvus_host, milvus_port) model_instance = client.load_model(model_name=model_name) ``` #### 数据预处理与向量化 收集所有的需求文档、现有测试案例以及其他可能有助于理解系统的资料作为语料库的一部分。接着利用DeepSeek的能力把这些文本转化为高维空间中的稠密向量形式以便后续操作[^2]。 ```python documents = ["需求说明...", "已有测试用例描述..."] # 替换成实际的内容 vectorized_docs = model_instance.encode(documents) for doc_id, vector in zip(range(len(vectorized_docs)), vectorized_docs): collection.insert([doc_id], [vector]) ``` #### 查询相似度并自动生成测试用例 当接收到新的功能变更请求或其他触发条件时,可以通过自然语言查询的方式找到最接近的历史数据项;之后借助这些信息来辅助编写全新的自动化测试方案或者改进现有的版本。 ```python query_text = input("请输入要查找的相关信息:") encoded_query = model_instance.encode([query_text])[0] search_results = collection.search(encoded_query, limit=5) # 获取前五条匹配的结果 generated_test_cases = [] for result in search_results: related_doc = documents[result.id] new_case = generate_new_test_case_based_on(related_doc) # 定义此函数以适应具体业务逻辑 generated_test_cases.append(new_case) print("\n".join(generated_test_cases)) ``` 上述过程展示了如何结合LangChain框架的优势同DeepSeek的强大特性一起协作完成高效精准的软件质量保障活动。值得注意的是,这里的`generate_new_test_case_based_on()`方法需依据项目特点自行开发设计,从而更好地贴合特定应用场景的需求[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值