探索Streamlit在測試領域的高效應用:文檔讀取與大模型用例生成的完美前奏

大模型用例生成前置工作之文檔讀取——構建你的自動化測試基礎

在群友的極力推薦下,開始了streamlit的學習之旅。本文將介紹如何使用Streamlit開發一個多功能文檔處理工具,支持讀取、預覽、格式轉換和導出多種測試相關文檔(YAML、JSON、DOCX、PDF、Excel、Markdown),并提供Markdown預覽選項,為大模型測試用例生成奠定基礎。源碼以上傳云盤,歡迎下載試用,云盤地址見文章底部截圖。


功能概述

  1. 支持的文檔格式
    • YAML、JSON、DOCX、PDF、Excel、Markdown
  2. 核心功能
    • 文件上傳與預覽
    • 轉換為Markdown格式預覽
    • 格式轉換(Excel ? JSON/Markdown,JSON ? Excel/Markdown)
    • 文件導出為轉換后的格式
  3. 測試用例生成預留接口
    • 為后續集成大模型生成測試用例提供數據準備支持

依賴項安裝

在開始前,請確保安裝以下Python庫:

pip install streamlit pandas openpyxl python-docx pdfminer.six PyYAML markdown2

完整代碼實現

import streamlit as st
import pandas as pd
import yaml
from docx import Document
from pdfminer.high_level import extract_text
from markdown2 import markdown
import base64
from io import BytesIO# 主標題與副標題
st.title("文檔處理工具:大模型測試用例生成的前置準備")
st.subheader("支持YAML/JSON/DOCX/PDF/Excel/Markdown的讀取、預覽與格式轉換")def file_uploader_section():"""文件上傳與基本信息顯示"""uploaded_file = st.file_uploader("上傳文件",type=["yml", "json", "docx", "pdf", "xlsx", "md"],accept_multiple_files=False)if uploaded_file:st.write(f"文件名:{uploaded_file.name}")st.write(f"文件類型:{uploaded_file.type}")st.write(f"文件大小:{uploaded_file.size/1024:.2f} KB")return uploaded_filedef file_reader(file):"""根據文件類型讀取內容并轉換為字符串"""content = ""file_type = file.name.split('.')[-1]if file_type == 'yml':content = yaml.safe_load(file)content = yaml.dump(content)  # 轉為字符串elif file_type == 'json':df = pd.read_json(file)content = df.to_string(index=False)elif file_type == 'docx':doc = Document(file)paragraphs = [para.text for para in doc.paragraphs]content = '\n'.join(paragraphs)elif file_type == 'pdf':content = extract_text(file)elif file_type == 'xlsx':df = pd.read_excel(file)content = df.to_string(index=False)elif file_type == 'md':content = file.read().decode()return contentdef format_converter(content, convert_to_md):"""將文本轉換為Markdown格式"""if convert_to_md:return markdown(content)else:return contentdef file_exporter(file, converted_data, export_format):"""生成文件導出鏈接"""buffer = BytesIO()if export_format == "Original":file.seek(0)data = file.read()elif export_format == "JSON":if file.name.endswith('.xlsx'):df = pd.read_excel(file)data = df.to_json(orient='records').encode()else:st.error("僅Excel支持導出為JSON")return Noneelif export_format == "Markdown":if isinstance(converted_data, str):data = converted_data.encode()else:data = converted_data.to_markdown().encode()elif export_format == "Excel":if file.name.endswith('.json'):df = pd.read_json(file)df.to_excel(buffer, index=False)data = buffer.getvalue()else:st.error("僅JSON支持導出為Excel")return Noneelse:st.error("無效格式")return Noneb64 = base64.b64encode(data).decode()href = f'<a href="data:file/{export_format.lower()};base64,{b64}" ' \f'download="{file.name}.{export_format.lower()}">下載文件</a>'return hrefdef conversion_options(file_type):"""根據文件類型生成轉換選項"""options = ["Original"]if file_type == 'xlsx':options += ["JSON", "Markdown"]elif file_type == 'json':options += ["Excel", "Markdown"]return optionsdef main():uploaded_file = file_uploader_section()if uploaded_file:content = file_reader(uploaded_file)file_type = uploaded_file.name.split('.')[-1]# 文檔預覽with st.expander("文檔預覽"):convert_to_md = st.checkbox("轉換為Markdown格式預覽")converted_content = format_converter(content, convert_to_md)if convert_to_md:st.markdown(converted_content, unsafe_allow_html=True)else:st.text(converted_content)# 格式轉換與導出with st.expander("格式轉換與導出"):options = conversion_options(file_type)selected_format = st.selectbox("選擇導出格式", options)if selected_format != "Original":export_link = file_exporter(uploaded_file, converted_content, selected_format)if export_link:st.markdown(export_link, unsafe_allow_html=True)# 測試用例生成預留接口with st.expander("測試用例生成(預留)"):st.write("該功能需要集成NLP模型實現,當前版本暫不支持")if __name__ == "__main__":main()

代碼分塊詳解

1. 文件上傳與基本信息顯示

def file_uploader_section():uploaded_file = st.file_uploader("上傳文件",type=["yml", "json", "docx", "pdf", "xlsx", "md"],accept_multiple_files=False)if uploaded_file:st.write(f"文件名:{uploaded_file.name}")st.write(f"文件類型:{uploaded_file.type}")st.write(f"文件大小:{uploaded_file.size/1024:.2f} KB")return uploaded_file
  • 功能:提供文件上傳入口,顯示文件名、類型和大小

  • 關鍵點

    • st.file_uploader支持指定文件類型
    • accept_multiple_files=False限制單次上傳一個文件
  • 上傳一個EXCEL文檔
    在這里插入圖片描述


2. 文件內容讀取與解析

def file_reader(file):content = ""file_type = file.name.split('.')[-1]if file_type == 'yml':content = yaml.safe_load(file)content = yaml.dump(content)  # 轉為字符串elif file_type == 'json':df = pd.read_json(file)content = df.to_string(index=False)# 其他文件類型處理...return content
  • 功能:根據文件類型解析內容并返回字符串

  • 關鍵點

    • 使用pandas處理Excel/JSON的表格數據
    • yaml.dump()將YAML對象轉為字符串便于后續處理
  • 文檔預覽
    在這里插入圖片描述


3. Markdown格式轉換

def format_converter(content, convert_to_md):if convert_to_md:return markdown(content)else:return content
  • 功能:將文本內容轉換為Markdown格式
  • 依賴庫markdown2實現文本到Markdown的渲染

4. 文件導出功能

def file_exporter(file, converted_data, export_format):buffer = BytesIO()if export_format == "JSON":if file.name.endswith('.xlsx'):df = pd.read_excel(file)data = df.to_json(orient='records').encode()else:st.error("僅Excel支持導出為JSON")return Noneelif export_format == "Excel":if file.name.endswith('.json'):df = pd.read_json(file)df.to_excel(buffer, index=False)data = buffer.getvalue()else:st.error("僅JSON支持導出為Excel")return None# ...其他格式處理...b64 = base64.b64encode(data).decode()href = f'<a ...>下載文件</a>'return href
  • 功能:生成文件導出鏈接
  • 關鍵點
    • 使用base64編碼生成可下載的文件流
    • 支持Excel ? JSON/Markdown、JSON ? Excel/Markdown的雙向轉換
  • Excel ? JSON
[{"Test Name":"用例A","Status":"Pass","Execution Time":1744365600000,"Failure Reason":null,"Duration (s)":5,"Tester":"測試A","Environment":"Test","Version":"v1.0"},{"Test Name":"用例B","Status":"Fail","Execution Time":1744365900000,"Failure Reason":"請求超時","Duration (s)":3,"Tester":"測試A","Environment":"Test","Version":"v1.0"}
]

5. 格式轉換選項

def conversion_options(file_type):options = ["Original"]if file_type == 'xlsx':options += ["JSON", "Markdown"]elif file_type == 'json':options += ["Excel", "Markdown"]return options
  • 功能:根據文件類型動態生成轉換選項
  • 支持的轉換
    • Excel → JSON/Markdown
    • JSON → Excel/Markdown

6. 主函數邏輯

def main():uploaded_file = file_uploader_section()if uploaded_file:content = file_reader(uploaded_file)file_type = uploaded_file.name.split('.')[-1]# 預覽部分with st.expander("文檔預覽"):convert_to_md = st.checkbox("轉換為Markdown格式預覽")converted_content = format_converter(content, convert_to_md)# 顯示預覽內容# 轉換與導出部分with st.expander("格式轉換與導出"):options = conversion_options(file_type)selected_format = st.selectbox("選擇導出格式", options)if selected_format != "Original":export_link = file_exporter(...)st.markdown(export_link, unsafe_allow_html=True)# 測試用例生成預留with st.expander("測試用例生成(預留)"):st.write("該功能需要集成NLP模型實現,當前版本暫不支持")
  • 功能:整合所有模塊并組織界面
  • 關鍵點
    • 使用st.expander折疊功能區域,提升界面整潔度
    • 預留測試用例生成擴展位置

使用示例

  1. 運行應用
    streamlit run document_tool.py
    
  2. 界面操作
    • 上傳文件 → 查看文件信息 → 預覽內容 → 選擇導出格式 → 下載文件

擴展建議

  1. 測試用例生成功能

    • 集成deepseek-r1模型
    • 根據文檔內容生成功能測試用例或接口測試用例
  2. 用戶體驗優化

    • 添加文件內容搜索功能
    • 支持多文件批量處理

通過本文的工具,測試工程師可以高效地完成文檔預處理工作,為大模型驅動的自動化測試奠定基礎。代碼完整且可直接運行,適合快速集成到現有測試流程中。源碼獲取路徑:
在這里插入圖片描述

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75643.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75643.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75643.shtml

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

相關文章

flutter 桌面應用之窗口自定義

在開發桌面軟件的時候我們經常需要配置軟件的窗口的大小以及位置 我們有兩個框架選擇:window_manager和bitsdojo_window 對比bitsdojo_window 特性bitsdojo_windowwindow_manager自定義標題欄? 支持? 不支持控制窗口行為&#xff08;大小/位置&#xff09;?&#xff08;基本…

Cyber Weekly #51

賽博新聞 1、英偉達開源新模型&#xff0c;性能直逼DeepSeek-R1 本周&#xff0c;英偉達開源了基于Meta早期Llama-3.1-405B-Instruct模型開發的Llama-3.1-Nemotron-Ultra-253B-v1大語言模型&#xff0c;該模型擁有2530億參數&#xff0c;在多項基準測試中展現出與6710億參數的…

【JS】關于原型/原型鏈

本文會講解什么是原型&#xff0c;什么是原型鏈&#xff0c;以及查找原型的方法&#xff0c;最后會實現一個函數&#xff1a;判斷某對象是否有某屬性。 定義 原型&#xff1a;函數都有prototype屬性&#xff0c;稱作原型/原型對象 原型可以放一些方法和屬性&#xff0c;共享…

deskflow使用教程:一個可以讓兩臺電腦鼠標鍵盤截圖剪貼板共同使用的開源項目

首先去開源網站下載&#xff1a;Release v1.21.2 deskflow/deskflow 兩臺電腦都要下載這個文件 下載好后直接打開找到你想要的exe desflow.exe 然后你打開他&#xff0c;將兩臺電腦的TLS都關掉 下面步驟兩臺電腦都要完成&#xff1a; 電腦點開edit-》preferences 把這個取…

啥是Spring,有什么用,既然收費,如何免費創建SpringBoot項目,依賴下載不下來的解決方法,解決99%問題!

一、啥是Spring&#xff0c;為啥選擇它 我們平常說的Spring指的是Spring全家桶&#xff0c;我們為什么要選擇Spring&#xff0c;看看官方的話&#xff1a; 意思就是&#xff1a;用這個東西&#xff0c;又快又好又安全&#xff0c;反正就是好處全占了&#xff0c;所以我們選擇它…

正向代理 vs 反向代理:核心區別與應用場景詳解

目錄 代理服務器是什么&#xff1f; 正向代理&#xff08;Forward Proxy&#xff09;詳解 工作原理 典型應用場景 優缺點分析 反向代理&#xff08;Reverse Proxy&#xff09;詳解 工作原理 典型應用場景 優缺點分析 正向代理與反向代理的核心區別 對比表格 架構差異…

Matlab學習筆記五十:循環語句和條件語句的用法

1.說明 循環語句&#xff1a;for…end&#xff0c;while…end 條件語句&#xff1a;if…end&#xff0c;switch…case…end 其中if語句語法還可以是&#xff1a;for…else…end&#xff0c;for…elseif…else…end 2.簡單for程序實例 for x1:5 %循環遍歷1~5 yx5 end [1…

容器初始化Spring Boot項目原理,即web項目(war)包涉及相關類對比詳解

以下是關于 SpringBootServletInitializer、ServletContainerInitializer、SpringServletContainerInitializer、WebApplicationInitializer 和 ServletInitializer 的對比詳解及總結表格&#xff1a; 1. 核心對比詳解 (1) SpringBootServletInitializer 作用&#xff1a; S…

Linux 系統中打包與壓縮

以下是 Linux 系統中 打包與壓縮 的核心操作指南&#xff0c;涵蓋常用命令、格式對比及典型場景應用&#xff1a; 一、核心概念 打包&#xff08;Archiving&#xff09; 將多個文件或目錄合并為一個文件&#xff08;如 .tar&#xff09;&#xff0c;不改變文件體積。常用工具&a…

計算機組成原理(哈工大,會持續更新)

文章目錄 一 計算機組成概述1.1計算機系統簡介 一 計算機組成概述 1.1計算機系統簡介 計算機軟硬件的概念 計算機系統包含兩個部分一個部分為硬件&#xff0c;另一個部分為軟件 硬件&#xff1a;硬件包括我們能直觀看到的東西&#xff0c;也就是我們計算機的實體&#xff0…

ngx_conf_handler

定義在 src\core\ngx_conf_file.c static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last) {char *rv;void *conf, **confp;ngx_uint_t i, found;ngx_str_t *name;ngx_command_t *cmd;name cf->args->elts;found 0;for (…

Ubuntu系統美化

Ubuntu系統美化 一、Grub設置 1. 安裝Grub Customizer【推薦】 Grub Customizer是一個用于自定義 GRUB 引導菜單的實用程序 sudo add-apt-repository ppa:danielrichter2007/grub-customizer && sudo apt update && sudo apt install -y grub-customizer2.…

零基礎HTML·筆記(持續更新…)

基礎認知 HTML標簽的結構 <strong>文字變粗</strong> &#xff1c;開始標簽&#xff1e;內容&#xff1c;結束標簽&#xff1e; 結構說明&#xff1a; 標簽由<、>、1、英文單詞或字母組成。并且把標簽中<>包括起來的英文單詞或字母稱為標簽名。常…

nmcli創建wpa-psk2 wifi熱點

1. 創建新的WiFi連接&#xff1a; sudo nmcli connection add type wifi ifname wlan0 con-name WiFi名稱 autoconnect yes ssid WiFi名稱 2. 配置接入點模式和IP共享&#xff1a; sudo nmcli connection modify WiFi名稱 802-11-wireless.mode ap 802-11-wireless.band …

【消息隊列kafka_中間件】一、快速入門分布式消息隊列

在當今大數據和分布式系統盛行的時代&#xff0c;消息隊列作為一種關鍵的中間件技術&#xff0c;發揮著舉足輕重的作用。其中&#xff0c;Apache Kafka 以其卓越的性能、高可擴展性和強大的功能&#xff0c;成為眾多企業構建分布式應用的首選消息隊列解決方案。本篇文章將帶你深…

在線地圖支持天地圖和騰訊地圖,儀表板和數據大屏支持發布功能,DataEase開源BI工具v2.10.7 LTS版本發布

2025年4月11日&#xff0c;人人可用的開源BI工具DataEase正式發布v2.10.7 LTS版本。 這一版本的功能變動包括&#xff1a;數據源方面&#xff0c;Oracle數據源支持獲取和查詢物化視圖&#xff1b;圖表方面&#xff0c;在線地圖支持天地圖、騰訊地圖&#xff1b;新增子彈圖&…

【Linux實踐系列】:匿名管道收尾+完善shell外殼程序

&#x1f525; 本文專欄&#xff1a;Linux Linux實踐項目 &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 人生總會有自己能力所不及的范圍&#xff0c;但是如果你在你能力所及的范圍盡了全部的努力&#xff0c;那你還有什么遺…

【C++初學】課后作業匯總復習(七) 指針-深淺copy

1、 HugeInt類:構造、、cout Description: 32位整數的計算機可以表示整數的范圍近似為&#xff0d;20億到&#xff0b;20億。在這個范圍內操作一般不會出現問題&#xff0c;但是有的應用程序可能需要使用超出上述范圍的整數。C可以滿足這個需求&#xff0c;創建功能強大的新的…

【C++】 —— 筆試刷題day_16

刷題_day16&#xff0c;繼續加油啊 一、字符串替換 題目解析 這道題是一道簡單的字符題目&#xff0c;題目給我們一個字符串A&#xff0c;和n表示A字符串的長度&#xff0c;再給出一個字符數組arg&#xff0c;m表示arg中是數據個數。 然我們在字符串A中找到%s然后替換成arg中的…

n8n 本地部署及實踐應用,實現零成本自動化運營 Telegram 頻道(保證好使)

n8n 本地部署及實踐應用&#xff0c;實現零成本自動化運營 Telegram 頻道&#xff08;保證好使&#xff09; 簡介 n8n 介紹 一、高度可定制性 二、豐富的連接器生態 三、自托管部署&#xff08;本地部署&#xff09; 四、社區驅動 n8n 的部署 一、前期準備 二、部署步…