• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Python使用Streamlit打造高效的测试数据生成器

    发布者: 土豆服务器 | 发布时间: 2025-6-17 08:13| 查看数: 94| 评论数: 0|帖子模式

    在测试工程师的日常工作中,生成高质量的测试数据是一个不可或缺的环节。测试数据的多样性、可控性直接影响测试的覆盖范围和准确性。然而,手动生成数据可能费时费力,效率低下。利用 Python 的 Streamlit 和 Faker 库,我们可以快速构建一个简单实用的 测试数据生成器,帮助测试工程师一键生成高质量的测试数据。并提供与deepseek-r1大模型融合的突破点。
    本文将通过代码分段讲解,带你一步步实现一个可视化、灵活配置的测试数据生成工具。


    一、现有测试数据生成器的功能

    通过 Streamlit 和 Faker,我们可以实现一个如下功能的测试数据生成器:
    字段的灵活配置:用户可以动态添加或删除字段,设置字段名称和类型(如整数、浮点数、日期、字符串等)。
    定制化的数据生成规则:

    • 对于需要范围约束的字段(如整数、浮点数、日期),支持设置上下限。
    • 对于浮点数字段,可以指定小数位数。
    • 对于其他字段(如姓名、邮箱、地址等),通过 Faker 库生成模拟真实数据。
    批量生成数据:通过配置生成多行测试数据。
    数据导出:支持将生成的数据导出为 JSON、Excel、YAML 或 Markdown 文件。
    代码核心逻辑:

    • 基于用户输入的字段配置,动态使用 Faker 的方法生成对应类型的模拟数据。
    • 提供可视化的预览,并一键导出为多种格式。

    二、实现核心功能的代码分段讲解


    1. 构建 Streamlit 应用的基本框架
    1. import streamlit as st
    2. from faker import Faker

    3. fake = Faker('zh_CN')  # 使用中文环境
    4. st.set_page_config(page_title="测试数据生成器", layout="wide")

    5. menu = ["测试数据生成器", "Mock接口"]
    6. choice = st.sidebar.selectbox("选择功能", menu)
    复制代码
    通过 Streamlit 的 set_page_config 设置页面标题和布局风格。sidebar.selectbox() 则用来实现功能切换,比如本文主要关注的 测试数据生成器。

    2. 用户界面:灵活配置字段

    我们通过 st.session_state 保存用户配置的字段信息,支持动态添加、删除字段。
    创建字段配置区域
    1. data_types = [
    2.     "整数", "浮点数", "字符串", "日期", "布尔值",
    3.     "名字", "姓氏", "全名", "邮箱", "地址",
    4.     "城市", "省份", "邮编", "电话号码", "公司名称"
    5. ]

    6. if 'fields' not in st.session_state:
    7.     st.session_state.fields = [{'name': '', 'type': data_types[0], 'min': None, 'max': None, 'decimal': 2}]
    复制代码
    字段类型:支持多种常见类型,例如整数、浮点数、日期等。
    初始字段:通过 st.session_state 初始化一个字段列表,用户可以在此基础上动态修改。
    动态增减字段
    1. for i in range(len(st.session_state.fields)):
    2.     field = st.session_state.fields[i]
    3.     col1, col2, col3 = st.columns([3, 3, 1])
    4.    
    5.     # 配置字段名
    6.     with col1:
    7.         field['name'] = st.text_input(f"字段名 {i + 1}", value=field['name'], key=f"name_{i}")
    8.    
    9.     # 配置字段类型
    10.     with col2:
    11.         field['type'] = st.selectbox(f"数据种类 {i + 1}", options=data_types, index=data_types.index(field['type']), key=f"type_{i}")
    12.    
    13.     # 删除字段按钮
    14.     with col3:
    15.         if st.button("删除", key=f"remove_{i}"):
    16.             del st.session_state.fields[i]
    17.             st.rerun()
    复制代码
    字段名:用户可以自由输入字段名称。
    字段类型选择:通过 selectbox 提供数据类型下拉菜单。
    删除功能:每行字段配置支持一键删除。
    添加新字段
    1. if st.button("🔗 添加字段"):
    2.     st.session_state.fields.append({'name': '', 'type': data_types[0], 'min': None, 'max': None, 'decimal': 2})
    3.     st.rerun()
    复制代码
    用户点击按钮即可添加新字段,并动态刷新页面。

    3. 针对特定字段类型的配置

    对于某些字段类型(如整数、浮点数、日期等),我们允许用户配置上下限或格式要求:
    整数和浮点数的上下限
    1. if field_type in ["整数", "浮点数"]:
    2.     min_val = st.text_input("最小值", value=str(field_min) if field_min else "", key=f"min_{i}")
    3.     max_val = st.text_input("最大值", value=str(field_max) if field_max else "", key=f"max_{i}")
    4.    
    5.     if field_type == "浮点数":
    6.         decimal_places = st.number_input("小数位", min_value=0, max_value=10, value=decimal_places, key=f"decimal_{i}")
    7.         st.session_state.fields[i]['decimal'] = decimal_places
    复制代码
    日期范围
    1. if field_type == "日期":
    2.     min_val = st.date_input("最小值", value=field_min, key=f"min_date_{i}")
    3.     max_val = st.date_input("最大值", value=field_max, key=f"max_date_{i}")
    复制代码
    4. 生成测试数据

    用户点击按钮后,根据字段配置生成测试数据。
    1. if st.button("🚀 生成数据"):
    2.     generated_data = []

    3.     for _ in range(num_rows):
    4.         row_data = {}
    5.         for field in st.session_state.fields:
    6.             type_ = field['type']
    7.             name = field['name']
    8.             
    9.             # 根据字段类型生成数据
    10.             if type_ == "整数":
    11.                 data = fake.random_int(min=field['min'], max=field['max'])
    12.             elif type_ == "浮点数":
    13.                 data = round(fake.pyfloat(min_value=field['min'], max_value=field['max'], right_digits=field['decimal']), field['decimal'])
    14.             elif type_ == "日期":
    15.                 data = fake.date_between_dates(date_start=field['min'], date_end=field['max']).isoformat()
    16.             elif type_ == "邮箱":
    17.                 data = fake.email()
    18.             # 其他类型...
    19.             row_data[name] = data

    20.         generated_data.append(row_data)

    21. ​​​​​​​    df = pd.DataFrame(generated_data)
    22.     st.dataframe(df)
    复制代码


    5. 数据导出

    支持将生成的数据导出为 JSON、Excel、YAML、Markdown 文件。
    1. # JSON 导出
    2. json_export = df.to_json(orient='records', force_ascii=False)
    3. st.download_button(label="📥 下载 JSON", data=json_export, file_name="data.json", mime="application/json")

    4. # Excel 导出
    5. excel_buffer = BytesIO()
    6. with pd.ExcelWriter(excel_buffer, engine='openpyxl') as writer:
    7.     df.to_excel(writer, index=False)
    8. st.download_button(label="📥 下载 Excel", data=excel_buffer.getvalue(), file_name="data.xlsx", mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    复制代码
    提供多种格式,满足不同测试场景需求。


    三、落地场景

    接口测试:生成模拟 JSON 数据,快速测试接口的边界和异常处理能力。
    性能测试:批量生成大规模数据,用于测试系统的性能瓶颈。
    功能测试:生成覆盖多种场景的数据,验证系统的业务逻辑。
    如果将其与 DeepSeek(假设为一个深度搜索与分析平台)结合,则可以进一步提升工具的智能化程度和效率,尤其是在数据挖掘和复杂场景的处理上。

    四、结合 DeepSeek 的潜在优势

    在传统的测试数据生成器中,数据来源和生成逻辑通常是基于规则的。然而,测试需求可能更加复杂,例如:
    生成符合特定规则的复杂数据(如跨字段关联的数据)。
    从真实数据中提取模式,生成更加贴近实际业务的数据。
    深入分析生成的数据,确保其在覆盖率和逻辑上的完整性。
    结合 DeepSeek,可以实现以下功能突破:
    1. 智能数据生成:基于真实数据的深度学习
    DeepSeek 可以作为一个数据挖掘和模式识别引擎,帮助生成更贴近实际场景的数据。
    如何实现:

    • 提供真实业务数据作为训练集,例如用户行为日志、订单数据等。
    • DeepSeek 通过模式挖掘和分析,生成符合实际分布的数据生成规则。
    • 测试数据生成器调用 DeepSeek 的 API,根据用户配置的字段类型,从规则中生成更加逼真的测试数据。
    场景示例:

    • 生成符合复杂分布的用户行为数据(如用户访问的时间间隔、购买频率等)。
    • 模拟特定用户群的订单数据(如高消费用户与低消费用户的特征完全不同)。
    2. 动态数据扩充:融合外部数据源
    DeepSeek 可以实时搜索和分析外部数据源,为测试数据生成提供更多上下文信息。
    如何实现:

    • 当用户配置字段时,允许选择“动态扩展数据”模式。
    • DeepSeek 搜索和提取相关数据(如行业标准数据集、公开数据等)。
    • 将提取的数据注入生成器中,作为测试数据的基础。
    场景示例:

    • 生成包含真实地名、地址的物流测试数据。
    • 提取公开的金融数据(如股票价格、汇率)生成金融测试数据。
    3. 跨字段关联:复杂规则的数据生成
    在传统生成器中,字段往往是独立生成的,但实际业务中,字段之间可能存在复杂的逻辑关系。
    如何实现:

    • DeepSeek 构建跨字段的规则引擎,用户可以通过简单的配置实现字段间的逻辑关联。
    • 测试数据生成器调用 DeepSeek 的规则引擎,动态生成符合逻辑的数据。
    场景示例:

    • 生成订单数据时,确保“下单时间”早于“发货时间”。
    • 生成用户数据时,确保“年龄”符合与“职业”之间的常识性匹配。
    4. 智能化数据验证与分析
    DeepSeek 的分析能力可以用于验证生成数据的质量,确保测试覆盖率和逻辑完整性。
    如何实现:

    • 生成数据后,将其传递给 DeepSeek 进行分析。
    • DeepSeek 提供数据统计、分布可视化等功能,帮助用户发现潜在问题。
    • 根据分析结果,动态调整生成规则。
    场景示例:

    • 验证是否生成了足够的边界值(如最小值和最大值)。
    • 检查数据是否符合业务分布(如电商订单量的高峰时段是否合理)。
    5. 实时场景模拟:从搜索到生成
    DeepSeek 的实时搜索能力可以帮助用户快速创建特定场景的测试数据。
    如何实现:

    • 用户输入特定场景描述(如“模拟双十一的电商订单”)。
    • DeepSeek 通过搜索和分析,理解场景需求,并生成测试数据生成规则。
    • 测试数据生成器调用这些规则,生成符合场景的数据。
    场景示例:

    • 模拟高并发场景下的用户登录数据。
    • 模拟节假日促销期间的交易数据。
    6. 隐私保护的数据生成
    当测试数据涉及敏感信息(如用户数据)时,DeepSeek 可以通过隐私保护技术(如差分隐私或联邦学习)生成脱敏数据。
    如何实现:

    • 将敏感数据传递给 DeepSeek,利用隐私技术生成符合分布的合成数据。
    • 测试数据生成器基于这些合成数据生成测试集。
    场景示例:
    生成脱敏的医疗数据,用于测试医疗系统。
    生成加噪处理的用户数据,用于数据分析工具测试。

    五、结合 DeepSeek 的改进架构

    结合 DeepSeek 后的测试数据生成器架构如下:
    用户输入:

    • 配置字段类型、字段名、规则(如范围、格式)。
    • 选择是否使用 DeepSeek 的高级功能(如真实数据生成、跨字段关联、隐私保护等)。
    DeepSeek 联动:

    • 根据用户需求,DeepSeek 提供模式挖掘、规则生成或外部数据。
    • 测试数据生成器调用 DeepSeek 的 API,动态调整生成逻辑。
    数据生成:
    基于用户配置和 DeepSeek 提供的规则,生成测试数据。
    数据验证与导出:
    DeepSeek 提供生成数据的分析报告。
    用户导出数据为 JSON、Excel、YAML 或 Markdown。

    五、总结

    通过结合 DeepSeek,测试数据生成器可以从规则驱动进化到智能驱动,从而实现更高效、更精准的数据生成。这种结合不仅能满足复杂的测试需求,还能在数据生成、验证、分析等环节提供全方位支持。对于测试工程师而言,这将是一款不可或缺的智能化工具。
    到此这篇关于Python使用Streamlit打造高效的测试数据生成器的文章就介绍到这了,更多相关Python Streamlit测试数据生成器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/python/339839pch.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表