探索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.mzph.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 的部署 一、前期准备 二、部署步…