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.pswp.cn/pingmian/72665.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72665.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72665.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Excel(函數篇):COUNTIF與CONUTIFS函數、SUMIF與SUMIFS函數、ROUND函數、MATCH與INDEX函數、混合引用與條件格式

目錄 COUNTIF和COUNTIFS函數COUNTIF函數COUNTIFS函數SUMIF和SUMIFS函數SUMIF函數SUMIFS函數SUMIFS函數與控件實現動態年月匯總ROUND、ROUNDUP、ROUNDDOWN函數單元格混合引用條件格式與公式,標記整行數據MATCH和INDEX函數COUNTIF和COUNTIFS函數 COUNTIF函數 統計下“蘇州”出現…

上位機數據可視化:使用QtCharts繪制波形圖

工程配置 CMake文件 find_package(Qt5 COMPONENTS Charts REQUIRED)target_link_libraries(zhd-desktop PRIVATE Qt5::Charts)包含頭文件以及名稱空間&#xff08;這個很重要&#xff0c;沒有包含名稱空間編譯器會提示找不到相關的類型&#xff09; #include <QtCharts&g…

S32K144入門筆記(十三):LPIT的API函數解讀

目錄 1. SDK中的函數 2. API函數的釋義 2.1 獲取默認參數 2.2 初始化 2.3 啟動與停止 2.4 計數值的設置于讀取 2.5 中斷API 1. SDK中的函數 在使用SDK的非抽象驅動函數時&#xff0c;函數的定義與聲明在文件lpit_driver.c和lpit_driver.h中&#xff0c;一共有19個函數&a…

CSS - Pseudo-classes(偽類選擇器)

目錄 一、介紹二、常用種類三、案例實現案例一&#xff1a;a標簽使用link/visited/hover/active案例二&#xff1a;表單元素使用focus/disabled案例三、通過其余偽類實現元素靈活選中 一、介紹 CSS 偽類&#xff08;Pseudo-classes&#xff09; 用于定義元素的特定狀態或結構位…

http proxy的原理是什么

Http代理的原理 代理服務器會自動提取請求數據包中的HTTP請求數據發送給服務端&#xff0c;并將服務端的HTTP響應數據轉發給發送請求的客戶端&#xff0c;HTTP代理服務器使用的端口通常是8080。 對于Web客戶端來說&#xff0c;代理扮演的服務器角色&#xff0c;接收請求&…

Ubuntu22.04虛擬機里安裝Yolov8流程

1. 安裝pytorch sudo apt install nvidia-cuda-toolkit nvcc --version # 官方適配地址&#xff1a;https://download.pytorch.org/whl/torch/import torch print(torch.__version__) print(torch.cuda.is_available())2. 安裝環境 # cuDNN 安裝&#xff1a;https://develop…

神經網絡微調技術解析

神經網絡微調技術 微調&#xff08;Fine-tuning&#xff09;是遷移學習的核心技術&#xff0c;通過在預訓練模型基礎上調整參數&#xff0c;使其適應特定任務或領域。以下從傳統方法、參數高效微調&#xff08;PEFT&#xff09;、新興技術三個維度展開&#xff0c;覆蓋主流技術…

Spring 聲明式事務管理

Spring 編程的方式實現事務管理&#xff0c;這樣太過麻煩&#xff0c;需要在每個方法上面加上相應的事務處理操作&#xff0c;聲明式事務處理能夠很好的解決這個問題&#xff0c;比如通過tx命名空間&#xff0c;這樣只需要配置就可以檢測到相關的方法&#xff0c;或者是通過tra…

電機控制常見面試問題(十五)

文章目錄 一、電機氣隙二、電氣時間三.電機三環控制詳解四.驅動板跳線意義五.電機開環自檢 一、電機氣隙 電機氣隙是定子和轉子之間的空隙&#xff0c;防止釘子轉子運轉時物理接觸&#xff0c;此外&#xff0c;氣隙是磁路的重要環節&#xff0c;磁場需通過氣隙傳遞能量&#x…

代碼隨想錄算法訓練營第六十五天| 圖論10

Bellman_ford 隊列優化算法&#xff08;又名SPFA&#xff09; 代碼隨想錄 import collectionsdef main():n, m map(int, input().strip().split())edges [[] for _ in range(n 1)]for _ in range(m):src, dest, weight map(int, input().strip().split())edges[src].append…

Chat2DB:讓數據庫管理像聊天一樣簡單

數據庫工具的痛點與破局 在數據爆炸的時代&#xff0c;數據庫管理工具已成為企業高效運營的剛需。然而&#xff0c;傳統工具如Navicat、DBeaver雖功能強大&#xff0c;卻讓非技術人員和SQL新手望而卻步。復雜的界面、繁瑣的手動操作、晦澀的語法規則&#xff0c;成為橫亙在數據…

Navicat for Snowflake 震撼首發,激活數據倉庫管理全新動能

近日&#xff0c;Navicat 家族迎來了一位全新成員 — Navicat for Snowflake。Snowflake 是一款基于云架構的現代數據倉庫解決方案&#xff0c;以其彈性擴展、高性能和易用性著稱。這次首發的Navicat for Snowflake 專為簡化 Snowflake 數據庫管理任務而精心打造。它憑借其直觀…

【項目合集】智能語音小車-微信小程序控制

功能需求&#xff1a; 車子檢測環境溫度、濕度&#xff0c;上報 APP、WEB 端顯示實時數據可通過 APP 控制小車前進、左轉、右轉可通過語音控制小車前進后退車上一個 LED 燈&#xff0c;可通過 WEB、小程序控制在 APP、WEB 上均可注冊登錄 硬件清單 硬件 功能 備注 ESP32 …

人工智能與人的智能,改變一生的思維模型分享【4】決策樹

決策樹&#xff08; DECISION TREE&#xff09; 一般由一個決策圖和若干可能的結果組成。是一種通過羅列解題的關鍵步驟以及各步驟發生的條件和結果&#xff0c;由此來創建到達目標的規劃。 我們很早就知道有一個方法&#xff0c;叫做當你苦悶、糾結的時候&#xff0c;把你的所…

利用余弦相似度在大量文章中找出抄襲的文章

我前面的2篇文章分別講了如果利用余弦相似度來判斷2篇文章的相似度&#xff0c;來確定文章是否存在抄襲&#xff0c;和余弦相似度的原理&#xff0c;即余弦相似度到底是怎么來判斷文章的相似性高低的等等。這一篇再說下&#xff0c;對于文章字數多和大量文章時&#xff0c;如果…

設計模式-對象創建

對象創建 前言1. Factory Method1.1 模式介紹1.2 模式代碼1.2.1 問題代碼1.2.2 重構代碼 1.3 模式類圖1.4 要點總結 2. Abstract Factory2.1 模式介紹2.2 模式代碼2.2.1 問題代碼2.2.2 重構代碼 2.3 模式類圖2.4 要點總結 3. Prototype3.1 模式介紹3.2 模式代碼3.3 模式類圖3.4…

SQLAlchemy系列教程:批量插入數據

高效地批量插入數據對于應用程序的性能至關重要。SQLAlchemy為批處理操作提供了幾種機制&#xff0c;可以最大限度地減少開銷并加快數據庫事務時間。在本指南中&#xff0c;我們將探討如何使用SQLAlchemy執行批量插入&#xff0c;包括從基礎技術到高級技術。 搭建環境 在開始之…

V2X驗證

1. 標準和規范驗證 歐洲對 DSRC 和 V2X 系統有一系列的標準和規范,主要由 ETSI (European Telecommunications Standards Institute) 和 IEEE 等組織制定。驗證通常包括以下標準和規范: ETSI EN 302 571:這是DSRC在歐洲的主要標準,規定了DSRC系統的技術要求和操作條件。ET…

openEuler系統遷移 Docker 數據目錄到 /home,解決Docker 臨時文件占用大問題

根據錯誤信息 write /var/lib/docker/tmp/...: no space left on device&#xff0c;問題的根源是 根分區&#xff08;/&#xff09;的磁盤空間不足&#xff0c;而非 /home 分區的問題。以下是詳細解釋和解決方案&#xff1a; 問題原因分析 Docker 臨時文件占用根分區空間&…

Matlab 四分之一車輛被動懸架和模糊pid控制對比

1、內容簡介 Matlab 183-四分之一車輛被動懸架和模糊pid控制對比 可以交流、咨詢、答疑 2、內容說明 略 3.1 車輛多自由度模型建立 對于車輛動力學&#xff0c;一般都是研究其懸架系統&#xff0c;懸架系統由輪胎&#xff0c;輪胎空氣&#xff0c;彈簧&#xff0c;減震器和…