python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Streamlit测试数据生成器

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

作者:Python测试之道

这篇文章主要为大家详细介绍了如何利用 Python 的 Streamlit 和 Faker 库,快速构建一个简单实用的测试数据生成器,帮助测试工程师一键生成高质量的测试数据,感兴趣的可以了解下

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

本文将通过代码分段讲解,带你一步步实现一个可视化、灵活配置的测试数据生成工具。

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

通过 Streamlit 和 Faker,我们可以实现一个如下功能的测试数据生成器:

字段的灵活配置:用户可以动态添加或删除字段,设置字段名称和类型(如整数、浮点数、日期、字符串等)。

定制化的数据生成规则:

批量生成数据:通过配置生成多行测试数据。

数据导出:支持将生成的数据导出为 JSON、Excel、YAML 或 Markdown 文件。

代码核心逻辑:

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

1. 构建 Streamlit 应用的基本框架

import streamlit as st
from faker import Faker

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

menu = ["测试数据生成器", "Mock接口"]
choice = st.sidebar.selectbox("选择功能", menu)

通过 Streamlit 的 set_page_config 设置页面标题和布局风格。sidebar.selectbox() 则用来实现功能切换,比如本文主要关注的 测试数据生成器。

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

我们通过 st.session_state 保存用户配置的字段信息,支持动态添加、删除字段。

创建字段配置区域

data_types = [
    "整数", "浮点数", "字符串", "日期", "布尔值",
    "名字", "姓氏", "全名", "邮箱", "地址",
    "城市", "省份", "邮编", "电话号码", "公司名称"
]

if 'fields' not in st.session_state:
    st.session_state.fields = [{'name': '', 'type': data_types[0], 'min': None, 'max': None, 'decimal': 2}]

字段类型:支持多种常见类型,例如整数、浮点数、日期等。

初始字段:通过 st.session_state 初始化一个字段列表,用户可以在此基础上动态修改。

动态增减字段

for i in range(len(st.session_state.fields)):
    field = st.session_state.fields[i]
    col1, col2, col3 = st.columns([3, 3, 1])
    
    # 配置字段名
    with col1:
        field['name'] = st.text_input(f"字段名 {i + 1}", value=field['name'], key=f"name_{i}")
    
    # 配置字段类型
    with col2:
        field['type'] = st.selectbox(f"数据种类 {i + 1}", options=data_types, index=data_types.index(field['type']), key=f"type_{i}")
    
    # 删除字段按钮
    with col3:
        if st.button("删除", key=f"remove_{i}"):
            del st.session_state.fields[i]
            st.rerun()

字段名:用户可以自由输入字段名称。

字段类型选择:通过 selectbox 提供数据类型下拉菜单。

删除功能:每行字段配置支持一键删除。

添加新字段

if st.button("🔗 添加字段"):
    st.session_state.fields.append({'name': '', 'type': data_types[0], 'min': None, 'max': None, 'decimal': 2})
    st.rerun()

用户点击按钮即可添加新字段,并动态刷新页面。

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

对于某些字段类型(如整数、浮点数、日期等),我们允许用户配置上下限或格式要求:

整数和浮点数的上下限

if field_type in ["整数", "浮点数"]:
    min_val = st.text_input("最小值", value=str(field_min) if field_min else "", key=f"min_{i}")
    max_val = st.text_input("最大值", value=str(field_max) if field_max else "", key=f"max_{i}")
    
    if field_type == "浮点数":
        decimal_places = st.number_input("小数位", min_value=0, max_value=10, value=decimal_places, key=f"decimal_{i}")
        st.session_state.fields[i]['decimal'] = decimal_places

日期范围

if field_type == "日期":
    min_val = st.date_input("最小值", value=field_min, key=f"min_date_{i}")
    max_val = st.date_input("最大值", value=field_max, key=f"max_date_{i}")

4. 生成测试数据

用户点击按钮后,根据字段配置生成测试数据。

if st.button("🚀 生成数据"):
    generated_data = []

    for _ in range(num_rows):
        row_data = {}
        for field in st.session_state.fields:
            type_ = field['type']
            name = field['name']
            
            # 根据字段类型生成数据
            if type_ == "整数":
                data = fake.random_int(min=field['min'], max=field['max'])
            elif type_ == "浮点数":
                data = round(fake.pyfloat(min_value=field['min'], max_value=field['max'], right_digits=field['decimal']), field['decimal'])
            elif type_ == "日期":
                data = fake.date_between_dates(date_start=field['min'], date_end=field['max']).isoformat()
            elif type_ == "邮箱":
                data = fake.email()
            # 其他类型...
            row_data[name] = data

        generated_data.append(row_data)

​​​​​​​    df = pd.DataFrame(generated_data)
    st.dataframe(df)

5. 数据导出

支持将生成的数据导出为 JSON、Excel、YAML、Markdown 文件。

# JSON 导出
json_export = df.to_json(orient='records', force_ascii=False)
st.download_button(label="📥 下载 JSON", data=json_export, file_name="data.json", mime="application/json")

# Excel 导出
excel_buffer = BytesIO()
with pd.ExcelWriter(excel_buffer, engine='openpyxl') as writer:
    df.to_excel(writer, index=False)
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 可以作为一个数据挖掘和模式识别引擎,帮助生成更贴近实际场景的数据。

如何实现:

场景示例:

2. 动态数据扩充:融合外部数据源

DeepSeek 可以实时搜索和分析外部数据源,为测试数据生成提供更多上下文信息。

如何实现:

场景示例:

3. 跨字段关联:复杂规则的数据生成

在传统生成器中,字段往往是独立生成的,但实际业务中,字段之间可能存在复杂的逻辑关系。

如何实现:

场景示例:

4. 智能化数据验证与分析

DeepSeek 的分析能力可以用于验证生成数据的质量,确保测试覆盖率和逻辑完整性。

如何实现:

场景示例:

5. 实时场景模拟:从搜索到生成

DeepSeek 的实时搜索能力可以帮助用户快速创建特定场景的测试数据。

如何实现:

场景示例:

6. 隐私保护的数据生成

当测试数据涉及敏感信息(如用户数据)时,DeepSeek 可以通过隐私保护技术(如差分隐私或联邦学习)生成脱敏数据。

如何实现:

场景示例:

生成脱敏的医疗数据,用于测试医疗系统。

生成加噪处理的用户数据,用于数据分析工具测试。

五、结合 DeepSeek 的改进架构

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

用户输入:

DeepSeek 联动:

数据生成:

基于用户配置和 DeepSeek 提供的规则,生成测试数据。

数据验证与导出:

DeepSeek 提供生成数据的分析报告。

用户导出数据为 JSON、Excel、YAML 或 Markdown。

五、总结

通过结合 DeepSeek,测试数据生成器可以从规则驱动进化到智能驱动,从而实现更高效、更精准的数据生成。这种结合不仅能满足复杂的测试需求,还能在数据生成、验证、分析等环节提供全方位支持。对于测试工程师而言,这将是一款不可或缺的智能化工具。

到此这篇关于Python使用Streamlit打造高效的测试数据生成器的文章就介绍到这了,更多相关Python Streamlit测试数据生成器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文