Deepseek API+Python测试用例一键生成与导出-V1.0.2【实现需求文档图片识别与用例生成自动化】

在测试工作中,需求文档中的图片(如界面设计图、流程图)往往是测试用例生成的重要参考。然而,手动提取图片并识别内容不仅耗时,还容易出错。本文将通过一个自研小工具,结合 PaddleOCR 和大模型,自动从需求文档的指定标题下提取图片,识别图片中的文字,并生成功能测试用例。这一流程能帮助测试工程师大幅提高效率,同时确保用例生成的精准性。支持同时指定文本标题及图片标题。感兴趣的同学点击下面小卡片获取源码相对于前面的版本:

  • 优化了一些报错导致闪退的情形
  • 增加了图片标题输入框
  • 布局调整
  • 增加了行业下拉选择框
    在这里插入图片描述

一、整体解决方案

我们将完成以下功能:

  1. 从 Word 文档中提取图片:通过 python-docx 提取指定标题下的图片。
  2. 图片文字识别:使用 PaddleOCR 对图片中的文字内容进行识别。
  3. 用例生成:将识别到的文字内容传递给大模型(如 OpenAI GPT),自动生成功能测试用例。

整个工具的实现框架如下:

+-------------------------------------------+
|  需求文档加载                              |
|  读取 Word 文档 (docx)                     |
+-------------------------------------------+↓
+-------------------------------------------+
|  图片提取                                   |
|  识别指定标题下的图片                      |
+-------------------------------------------+↓
+-------------------------------------------+
|  图片文字识别                               |
|  使用 PaddleOCR 识别图片中的文字           |
+-------------------------------------------+↓
+-------------------------------------------+
|  用例生成                                   |
|  将识别文字传递给大模型生成测试用例         |
+-------------------------------------------+↓
+-------------------------------------------+
|  输出测试用例                               |
|  将生成的测试用例保存为文档                 |
+-------------------------------------------+

二、工具实现步骤

1. 环境准备

安装以下必要的 Python 库:

pip install python-docx paddleocr paddlepaddle openai
  • python-docx:用于读取 Word 文档。
  • paddleocrpaddlepaddle:用于图片文字识别。
  • openai:与大模型交互生成测试用例。

2. 提取 Word 文档中指定标题下的图片

在需求文档中,图片通常位于某些特定的标题下(如“登录界面设计”)。我们使用 python-docx 遍历文档内容并提取这些图片。

代码示例:


# 提取指定标题下的图片def extract_text_by_title(self, docx_path, title_keywords, table_keywords, pic_keywords):"""提取多个标题下的正文内容:param pic_keywords: 图片路径:param table_keywords: 表格路径:param docx_path: docx 文件路径:param title_keywords: 标题关键词列表:return: 提取的正文内容(按标题分组)"""doc = Document(docx_path)result = {}doc = self.remove_toc(doc)  # 先清理一波目录for title_keyword in title_keywords.split(','):content = []capture = Falsefor paragraph in doc.paragraphs:text = paragraph.text.strip()if text:# 判断是否是标题if title_keyword in text and 'toc' not in paragraph.style.name.lower():capture = Truecontent.append(text)continue# 停止捕获正文内容if capture and re.match(r"^\d+(\.\d+)*\s+.+", text):  # 新标题breakelif "标题" in paragraph.style.name and capture:  # 遇到下一个标题则停止获取break# 捕获正文内容if capture and text:content.append(text)result[title_keyword] = "\n".join(content)for pic_keyword in pic_keywords.split(','):image_paths = self.get_target_pic(docx_path, pic_keyword)print(image_paths)if not image_paths:print("未找到目标标题下的图片")else:print(f"提取到 {len(image_paths)} 张图片:{image_paths}")# OCR 识别print("\n正在进行 OCR 识别...")ocr_results = self.perform_ocr_with_paddle(image_paths)# 输出结果ocr_results_text = ''for image_path, text in ocr_results:# print(f"\n图片路径:{image_path}")# print(f"识别内容:\n{text}")ocr_results_text += text + '--'result['识别内容'] = ocr_results_textreturn result

示例:提取“业务流程”标题下的图片

在这里插入图片描述


3. 使用 PaddleOCR 进行图片文字识别

使用 PaddleOCR 对提取的图片进行文字识别,并输出识别结果。

代码示例:

def perform_ocr_with_paddle(self, images):"""使用 PaddleOCR 对图片进行文字识别。"""results = []# 初始化 PaddleOCRocr = PaddleOCR(use_angle_cls=True, lang="ch")  # 支持方向分类和中英文混合识别for image_path in images:try:img = cv2.imread(image_path)ocr_result = ocr.ocr(img, cls=True)text_lines = [line[1][0] for line in ocr_result[0]]results.append((image_path, "\n".join(text_lines)))except Exception as e:results.append((image_path, f"OCR 识别失败: {e}"))return results

识别结果如图:

在这里插入图片描述

4. 交互大模型生成测试用例

将识别到的文字内容传递给大模型(如 OpenAI GPT),并生成功能测试用例。

代码示例:

    def generate_cases(self, content_param, prompt_param, job_area):# 初始化OpenAI客户端client = OpenAI(# 如果没有配置环境变量,请用百炼API Key替换:api_key="sk-xxx"api_key='sk-xxx',  # todo 此处需更换base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")reasoning_content = ""  # 定义完整思考过程answer_content = ""  # 定义完整回复is_answering = False  # 判断是否结束思考过程并开始回复# 创建聊天完成请求completion = client.chat.completions.create(model="deepseek-r1",  # 此处以 deepseek-r1 为例,可按需更换模型名称messages=[{'role': 'user', 'content': f'所在行业: {job_area if job_area else None};文档内容: {content_param}, 提示词:{prompt_param}'}],stream=True,# 解除以下注释会在最后一个chunk返回Token使用量# stream_options={#     "include_usage": True# })print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")for chunk in completion:# 如果chunk.choices为空,则打印usageif not chunk.choices:print("\nUsage:")print(chunk.usage)else:delta = chunk.choices[0].delta# 打印思考过程if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:print(delta.reasoning_content, end='', flush=True)reasoning_content += delta.reasoning_contentelse:# 开始回复if delta.content != "" and not is_answering:print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")is_answering = True# 打印回复过程print(delta.content, end='', flush=True)answer_content += delta.contentreturn answer_content

5. 输出测试用例到文档

将生成的JSON格式的测试用例保存为 Excel文档,便于后续查看和管理。

代码示例:

    def json_to_excel(self, json_data, output_file):"""将任意 JSON 数据中的键作为表头,值作为值,转换为 Excel 表格:param json_data: JSON 数据(字符串或字典):param output_file: 输出的 Excel 文件路径"""# 如果输入是 JSON 字符串,将其解析为字典data_list = Noneif isinstance(json_data, str):json_data = json.loads(json_data)# 找到 JSON 数据中的列表部分(假设是字典中的第一个值)if isinstance(json_data, dict):for key, value in json_data.items():if isinstance(value, list):  # 找到第一个值为列表的键data_list = valuebreakelif isinstance(json_data, list):data_list = json_dataelse:raise ValueError("JSON 数据中未找到列表部分!")if data_list:# 将列表部分转换为 DataFramedf = pd.DataFrame(data_list)# 将 DataFrame 导出为 Excel 文件df.to_excel(output_file, index=False)print(f"Excel 文件已成功生成:{output_file}")else:print("Excel 文件生成失败")

三、完整运行流程

  1. 准备环境:安装所需库,并将需求文档(docx 文件)和 PaddleOCR 模型准备好。
  2. 提取图片:运行代码提取目标标题下的所有图片。
  3. 文字识别:使用 PaddleOCR 对图片进行文字识别,提取关键信息。
  4. 生成测试用例:调用大模型,基于提取的文字内容生成功能测试用例。
  5. 保存结果:将生成的测试用例保存到 Word 文档中,便于后续使用。

四、工具的实际应用场景

  1. 自动化用例生成:通过识别需求文档中的图片内容,快速生成对应的测试用例。
  2. 需求验证:结合图片中的文字内容和生成的测试用例,验证需求文档的完整性和准确性。
  3. 团队协作:将生成的测试用例文档分发给团队成员,提高工作效率。

五、小结

通过本文的工具实现,测试工程师可以将需求文档中的图片内容自动化处理,结合 PaddleOCR 和大模型生成高质量的功能测试用例。整个流程完全落地可用,适用于日常的测试用例生成需求,帮助测试工程师从重复性工作中解放出来,更专注于高价值的测试分析工作。

快试试这个工具,将测试效率提升到新高度吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35367.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建opensbi+kernel+rootfs及基本设备驱动开发流程

目录 一.编译qemu 运行opensbikernelrootfs 1.编译qemu-9.1.1 2.安装riscv64编译器 3. 编译opensbi 4.编译kernel 5.编译rootfs 设备驱动开发流程 1.安装 RISC-V 交叉编译工具链 2.驱动开发准备 3.编写简易中断控制器驱动(PLIC)​ 4.配置内核…

16.使用读写包操作Excel文件:XlsxWriter 包

一 XlsxWriter 的介绍 XlsxWriter 只能写入 Excel 文件。 OpenPyXL 和 XlsxWriter 的区别在笔记 15 。 二 如何使用 XlsxWriter 1.导包 import datetime as dtimport xlsxwriterimport excel 2.实例化工作簿 book xlsxwriter.Workbook("xlxswriter.xlsx") book.clo…

LeetCode 124.二叉树中的最大路径和

题目: 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

MCP 开放协议

本文翻译整理自: https://modelcontextprotocol.io/introduction 文章目录 简介一、关于 MCP二、为什么选择MCP?通用架构 三、开始使用1、快速入门2、示例 四、教程五、探索 MCP六、贡献和支持反馈贡献支持和反馈 服务器开发者一、构建服务器1、我们将要…

方差,协方差及协方差矩阵的计算

1.方差 方差是用来衡量一组数据的离散程度,数序表达式如下: σ 2 1 N ∑ i 1 N ( x i − μ ) 2 \sigma^2\frac1N\sum_{i1}^N(x_i-\mu)^2 σ2N1​i1∑N​(xi​−μ)2 σ 2 σ^2 σ2表示样本的总体方差, N N N 表示样本总数, x i x _i xi​…

【2025】基于python+django的慢性病健康管理系统(源码、万字文档、图文修改、调试答疑)

系统功能结构图如下 慢性病健康管理系统 课题背景 随着全球人口老龄化的加剧以及生活方式的改变,慢性病的发病率呈上升趋势,给个人健康和社会医疗资源带来了巨大压力。传统的慢性病管理模式存在信息不畅、患者参与度低、医疗资源分配不均等问题&#xf…

2.2 B/S架构和Tomcat服务器

本文介绍了B/S架构、Tomcat服务器及其与IDEA的整合。B/S架构是一种基于浏览器的网络计算模式,具有跨平台、易用性强的特点,适用于互联网应用。Tomcat是Apache开源的Web服务器,支持Java Web应用的部署和运行。文章通过实例演示了如何下载、安装…

QT非UI设计器生成界面的国际化

目的 UI设计器生成界面的国际化,比较容易实现些,因为有现成的函数可以调用,基本过程如下: void MainWindow::on_actLang_CN_triggered() {//中文界面qApp->removeTranslator(trans);delete trans;transnew QTranslator;trans…

Hackme靶机通关攻略

1,打开靶机和kali,在kali终端中扫描靶机ip,得到靶机ip为192.168.50.137 arp-scan -l 2,使用工具扫描出后台目录后访问login.php 3,注册后登陆发现有输入框,可以尝试使用sql注入来得到用户名和密码,密码需要…

国产编辑器EverEdit - 工具栏自定义及认识工具栏上的按钮

1 设置-高级-工具条 1.1 设置说明 1.1.1 工具条自定义 选择主菜单工具 -> 设置 -> 常规,在弹出的选项窗口中选择工具条分类,如下图所示: 左侧窗口是当前支持所有功能按钮列表(上图中居中栏),右侧的窗口是当前显示在工具栏…

docker安装rabbitmq

第一步直接dokce拉取rabbitmq镜像docker 利用docker直接拉取镜像最新版:docker search rabbitmq 运行mq: 需要注意的是-p 5673:5672 解释:-p 外网端口:docker的内部端口 ,你们可以改成自己的外网端口号,我这…

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 8.2.2AWS OpenSearch Serverless 成本优化与冷热数据分离深度实践1. 成本构成分析与优化机会识别1.1 Serverless模式成本分布1.2 冷热数据特征分析数据特征矩阵 2. 冷热数据…

安卓edge://inspect 和 chrome://inspect调试移动设备上的网页

edge://inspect 和 chrome://inspect 是用于调试浏览器中运行的网页和移动设备上的网页的工具。这两个工具分别属于 Microsoft Edge 和 Google Chrome 浏览器。以下是它们的详细介绍: chrome://inspect 如果是直接使用数据线调试,则只需要执行下面的第一…

checkpoint机制

1、什么是checkpoint 将缓冲池中的脏页刷新到磁盘,并更新redo log的checkpoint位点,确保数据库在发生故障时可以快速恢复到一致的状态。 2、checkpoint执行过程 确保需要刷新的脏页:从缓冲池中选取一部分需要刷新的页数据页刷新&#xff1…

【微服务日志收集①】使用FileBeat+Logstash+ES搭建ELK日志系统

使用FileBeatLogstashES搭建ELK日志系统,架构图如下: 1、 使用docker快速创建ES服务和Kibana服务 前置条件:需要在linux上提前安装好docker和docker-compose 1.1、在linux创建好一个用于存放docker-compose配置文件的文件夹 我的目录是/app/…

Centos 7 安装达梦数据库

一、环境准备 1. 确认操作系统的版本和数据库的版本是否一致 cat /etc/redhat-release 2. 关闭防火墙 查看防火墙状态 firewall-cmd --state 停止firewall systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.service 3. 修改文件l…

仿“东方甄选”直播商城小程序运营平台

在公域直播流量红利趋于饱和、流量成本大幅攀升的当下,私域直播为企业开辟了新的流量聚集和转化渠道,特别是对于那些希望在私域流量领域取得突破的品牌商家来说,直播场景以其独特的高频互动氛围,相比其他运营方式,展现…

ZED X系列双目3D相机的耐用性与创新设计解析

在工业自动化和学术研究领域,高精度的视觉设备正成为提升效率和质量的关键。ZED X系列AI立体相机,凭借其先进的技术和耐用的设计,为这一领域带来了新的可能。 核心技术:深度感知与精准追踪 ZED X系列的核心技术之一是Neural Dept…

Cursor的使用感受,帮你使用好自动化编程工具,整理笔记

使用感受 说实话,我觉得cursor还是好用的,可能我刚开始使用,没有使用的非常的熟练,运用也没有非常的透彻,总体体验还是不错的,在使用它时,我优先考虑,前端页面功能复用的时候&#…