随着人工智能技术的快速发展,大语言模型(LLM)在软件测试领域展现出巨大潜力,博主结合自身人工智能专业知识和一定的测试理解探索AI+测试的应用落地。我们知道新入行的测试工程师常常需要花费大量时间编写测试用例,这是一项既重要又繁琐的工作。本文将介绍如何通过本地化部署和prompt微调,探索构建一个专门用于自动生成测试用例的前后端AI助手系统,提高测试效率的同时保证测试质量。
背景
在传统测试用例编写过程中,测试工程师需要:
- 理解业务需求和功能规格
- 设计测试场景和步骤
- 预测预期结果
- 编写格式化的测试用例文档
这一过程不仅耗时,还容易出现覆盖不全面的情况。而利用大语言模型,我们可以将这一过程半自动化,让AI协助我们生成高质量的测试用例。
系统架构概述
我们的系统采用了前后端分离的架构,后端使用Flask框架,前端使用简单的HTML+JavaScript实现。系统的核心是基于大语言模型的API调用和prompt工程。
技术栈
- 后端:Python + Flask
- 前端:HTML + JavaScript
- LLM API:官方
- 数据存储:目前使用JSON配置文件,后续设计数据库
核心组件
- Prompt管理系统
- LLM接口调用
- 测试用例格式化处理
- 用户交互界面
Prompt微调方法
在这个系统中,prompt微调是核心技术点。我们采用了分层prompt设计,将提示词分为以下几个部分:
1. 通用规则
这部分包含基础的指导原则,告诉模型它的角色和基本任务。例如,我们定义模型是一位资深的软件测试专家,专注于为移动端视频app生成高质量的测试用例,并规定了测试用例的基本格式要求。
2. 业务规则
这部分包含特定业务场景的知识和要求。例如,针对视频缓存功能的测试,我们会告诉模型需要关注不同用户权限的缓存限制、单P/多P视频的缓存流程、缓存进度显示和管理、存储位置设置和切换等方面。
3. 自定义规则
允许用户在每次请求时添加特定的要求,比如"请确保测试用例覆盖弱网环境下的缓存功能表现"等。
4. 内容回答规则
这部分规定了模型回答的格式和行为准则,确保生成的测试用例符合预期格式,并在引用之前生成的测试用例时保持准确性。
Prompt组合逻辑
系统采用了精心设计的prompt组合逻辑,确保各部分提示词按照正确的顺序组合:
- 首先是通用规则,奠定基础
- 然后是业务规则,提供领域知识
- 接着是自定义规则,满足特定需求
- 最后是内容回答规则,规范输出格式
这种组合方式确保了模型能够理解任务要求,掌握业务知识,满足特定需求,并以规范的格式输出结果。
实际应用中的挑战与解决方案
在实际应用中,我们遇到了一些挑战,主要包括:
1. 格式一致性问题
挑战:模型有时会返回不一致的格式,例如部分内容是HTML表格,部分内容是纯文本表格。
解决方案:
- 在提示词中明确强调格式要求
- 在后端添加格式验证和处理机制,确保输出格式的一致性
2. 测试用例引用准确性
挑战:当要求模型深入分析之前生成的测试用例时,模型可能会自行创建新的测试用例ID或修改测试目的。
解决方案:
- 在提示词中明确要求模型严格引用原始测试用例
- 实现验证机制,检查模型引用的准确性,必要时进行修正
3. 测试场景覆盖全面性
挑战:确保生成的测试用例覆盖所有可能的测试场景。
解决方案:
- 在业务规则中明确列出需要覆盖的测试维度(功能、性能、兼容性、异常等)
- 通过自定义规则补充特定场景的覆盖要求
实际效果展示
使用此系统时,只需简单描述测试需求,就能生成全面的测试用例。例如,输入"根据业务内容生成测试用例",系统会返回格式化的HTML表格,包含功能测试、兼容性测试、性能测试和异常测试等多个维度的测试用例。
以下是系统生成的部分测试用例示例:
| 用例ID | 测试目的 | 前置条件 | 测试步骤 | 预期结果 | 测试类型 |
|---|---|---|---|---|---|
| 功能001 | 验证未登录用户缓存功能限制 | 1.用户未登录 2.进入视频播放页 | 1.点击右上角三点菜单 2.选择缓存选项 | 1.显示登录提示弹窗 2.无法进行缓存操作 | 功能 |
| 功能002 | 验证登录用户缓存权限 | 1.账号已登录 2.进入视频播放页 | 1.点击缓存按钮 2.选择清晰度 | 1.可正常选择清晰度选项 2.开始缓存视频 | 功能 |
结论与展望
通过api调用+本地prompt微调的方式,成功构建了一个专门用于生成测试用例的AI助手系统。
- 高效率:大幅减少测试用例编写时间
- 全面性:自动覆盖多种测试场景和边界条件
- 一致性:生成格式统一的测试用例
- 可定制:通过prompt微调适应不同业务场景
当然这都是博主在入职前的一些探索,在下一篇文章中,将深入探讨如何进一步优化prompt结构,实现更复杂的测试场景覆盖,以及如何将这个系统与现有测试管理工具集成。