本文基于 customtkinter 开发的桌面端测试用例生成工具,核心目标是实现「功能清单配置→知识库匹配→智能生成测试用例→批量导出」的全流程自动化。
下面从整体设计思路和核心技术原理两方面拆解,让你清晰理解代码的架构和底层逻辑。




功能清单页面设计核心思路:通过输入系统名称、模块名称,基于基础模板和完成模板两种方式,生成功能清单。
基础模版包括简单的新增、修改、删除、查询功能,完整的模版包括基础+其他功能(和公司密切相关的业务)。
同时,生成功能清单后可以进行修改,进而保存。
生成测试用例页面:通过导入用例知识库,结合导入的功能清单,基于功能清单的功能找到用例知识库。
如新增功能,匹配新增功能的测试用例,直到清单上所有功能匹配完成,生成excel 版本的测试用例。
整个设计逻辑按照模块名称对应sheet 名,页面名称对应页面名称,操作项对应功能项名称。
一、整体设计思路
工具采用「分层模块化+双Tab业务拆分」的设计模式,核心遵循「用户交互→数据处理→结果输出」的流程,同时兼顾易用性和扩展性。
1. 核心设计原则
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. 业务流程设计(核心链路)

3. 数据结构设计
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
二、核心技术原理
1. 界面开发:CustomTkinter + Tkinter 组合
- 底层框架
基于 tkinter(Python内置GUI库),用 customtkinter 封装美化(支持现代UI、主题切换、圆角控件)。 - 核心组件
-
CTkTabview:实现「功能清单」「测试用例」双Tab切换; -
CTkScrollableFrame:支持模块输入框的滚动展示; -
ttk.Treeview:测试用例/功能清单的可视化预览(支持双击编辑单元格); -
scrolledtext.ScrolledText:操作日志和对话记录的展示。 - 动态组件
ModuleFrame 类封装模块输入框,支持「添加/删除/编辑」,通过回调函数更新组件索引,实现动态布局。
2. 文档处理:python-docx + pandas
(1)Word(docx)处理(功能清单导入/导出)
-
导入:解析docx中的表格,过滤空行/表头行(修复最后一行识别问题),提取「模块/页面/功能项/备注」; -
导出:创建结构化Word表格,支持单元格合并、背景色设置、文字居中/加粗,生成标准化功能清单文档。
Docx 常见操作:
(2)Excel(xlsx)处理(知识库/用例导入/导出)
-
导入:pandas.read_excel 读取多sheet文件,按「功能项」分组构建知识库; -
导出:pandas.ExcelWriter 按模块拆分sheet,限制sheet名长度(Excel最大31字符),保证字段顺序与模板一致; -
关键优化:导出时自动为步骤/期望结果插入换行符( ),解决Excel双击换行问题。
Pandas 常见操作:pandas 是python 中用于操作excel 文件的类库,包括读取文件、写入文件,写入前同时伴随数据清洗、数据查询、数据分组与聚合等操作。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
df = pd.concat([pd.read_excel(xls, sheet) for sheet in xls.sheet_names]) |
|
|
|
|
|
|
|
|
|
|
|
for module, df_module in df.groupby("模块名称"): df_module.to_excel(writer, sheet_name=module, index=False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
df[col] = df[col].str.strip() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module_fail = df[df["测试结果"]=="fail"].groupby("模块名称")["用例编号"].count() module_fail_rate = (module_fail/module_total*100).fillna(0) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
df_result.to_excel(writer, sheet_name="模块失败率", index=False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for enc in encodings: try: df = pd.read_csv("文件.csv", encoding=enc) break except: continue |
|
|
|
df["bug编号"] = "" |
3. 智能生成:OpenAI API + 规则匹配
(1)知识库匹配逻辑
-
核心:按「功能项」精准匹配知识库中的用例模板,无匹配时触发「规则式自动生成」; -
规则生成:根据功能项关键词(新增/修改/删除/查询等),预设步骤/期望结果模板,覆盖80%通用场景。
(2)对话式批量修改
-
流程:用户输入自然语言指令 → 构造Prompt → 调用OpenAI API → 解析返回结果 → 更新用例数据; -
Prompt设计要点:限定字段范围、明确修改规则、要求保持数据结构一致; -
模型选择:gpt-4o-mini(兼顾成本和效果),temperature=0.2(保证输出稳定)。
4. 数据处理:正则表达式 + 日期计算
(1)文本处理(解决换行/格式问题)
作用:将「1、点击2、保存」拆分为「1 点击 2 保存」,实现Excel自动换行。
(2)日期处理(工作日计算)
作用:为测试用例分配合理的创建日期,跳过周末,符合实际测试流程。
5. 异常处理与日志
-
全局异常捕获:所有IO操作(文件读写、API调用)都包裹 try-except,避免程序崩溃; -
日志系统:分「功能清单日志」「测试用例日志」,记录操作时间+内容,支持滚动查看; -
用户反馈:通过 messagebox 提示操作结果,日志同步记录关键信息(如导入模块数、生成用例数)。
6. 知识库持久化
-
存储格式:JSON文件(knowledge_base.json),将 defaultdict(list) 转换为普通字典保存; -
加载逻辑:程序启动时自动加载,导入/追加模板后自动保存,避免重复配置。
三、关键技术亮点
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
总结
这份代码的核心设计逻辑是「可视化交互+结构化数据处理+智能生成」,技术上融合了:
- GUI开发:CustomTkinter实现现代界面,动态组件适配复杂输入;
- 文档解析:python-docx/pandas处理Word/Excel,保证数据导入导出的准确性;
- 智能生成:规则匹配+LLM API,实现测试用例的自动化和灵活修改;
- 工程化优化:异常处理、日志记录、数据持久化,保证工具的稳定性和易用性。
工具的核心价值是将测试用例编写从「手动逐条写」转变为「配置化+智能化生成」,大幅提升测试用例的编写效率,同时保证格式标准化。
针对于功能项操作很多系统都适配,将功能项进行模版化,从大到小进行拆分,再根据小的功能项进行组合进而形成页面用例、模块用例的组合。
——END——
声明:本文为51Testing软件测试网 M&T. 用户投稿内容,该用户投稿时已经承诺独立承担涉及知识产权的相关法律责任,并且已经向51Testing承诺此文并无抄袭内容。发布本文的用途仅仅为学习交流,不做任何商用,未经授权请勿转载,否则作者和51Testing有权追究责任。如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:editor@51testing.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

