Python使用Streamlit打造高效的測試數(shù)據(jù)生成器
在測試工程師的日常工作中,生成高質(zhì)量的測試數(shù)據(jù)是一個不可或缺的環(huán)節(jié)。測試數(shù)據(jù)的多樣性、可控性直接影響測試的覆蓋范圍和準(zhǔn)確性。然而,手動生成數(shù)據(jù)可能費時費力,效率低下。利用 Python 的 Streamlit 和 Faker 庫,我們可以快速構(gòu)建一個簡單實用的 測試數(shù)據(jù)生成器,幫助測試工程師一鍵生成高質(zhì)量的測試數(shù)據(jù)。并提供與deepseek-r1大模型融合的突破點。
本文將通過代碼分段講解,帶你一步步實現(xiàn)一個可視化、靈活配置的測試數(shù)據(jù)生成工具。
一、現(xiàn)有測試數(shù)據(jù)生成器的功能
通過 Streamlit 和 Faker,我們可以實現(xiàn)一個如下功能的測試數(shù)據(jù)生成器:
字段的靈活配置:用戶可以動態(tài)添加或刪除字段,設(shè)置字段名稱和類型(如整數(shù)、浮點數(shù)、日期、字符串等)。
定制化的數(shù)據(jù)生成規(guī)則:
- 對于需要范圍約束的字段(如整數(shù)、浮點數(shù)、日期),支持設(shè)置上下限。
- 對于浮點數(shù)字段,可以指定小數(shù)位數(shù)。
- 對于其他字段(如姓名、郵箱、地址等),通過 Faker 庫生成模擬真實數(shù)據(jù)。
批量生成數(shù)據(jù):通過配置生成多行測試數(shù)據(jù)。
數(shù)據(jù)導(dǎo)出:支持將生成的數(shù)據(jù)導(dǎo)出為 JSON、Excel、YAML 或 Markdown 文件。
代碼核心邏輯:
- 基于用戶輸入的字段配置,動態(tài)使用 Faker 的方法生成對應(yīng)類型的模擬數(shù)據(jù)。
- 提供可視化的預(yù)覽,并一鍵導(dǎo)出為多種格式。
二、實現(xiàn)核心功能的代碼分段講解
1. 構(gòu)建 Streamlit 應(yīng)用的基本框架
import streamlit as st from faker import Faker fake = Faker('zh_CN') # 使用中文環(huán)境 st.set_page_config(page_title="測試數(shù)據(jù)生成器", layout="wide") menu = ["測試數(shù)據(jù)生成器", "Mock接口"] choice = st.sidebar.selectbox("選擇功能", menu)
通過 Streamlit 的 set_page_config 設(shè)置頁面標(biāo)題和布局風(fēng)格。sidebar.selectbox() 則用來實現(xiàn)功能切換,比如本文主要關(guān)注的 測試數(shù)據(jù)生成器。
2. 用戶界面:靈活配置字段
我們通過 st.session_state 保存用戶配置的字段信息,支持動態(tài)添加、刪除字段。
創(chuàng)建字段配置區(qū)域
data_types = [ "整數(shù)", "浮點數(shù)", "字符串", "日期", "布爾值", "名字", "姓氏", "全名", "郵箱", "地址", "城市", "省份", "郵編", "電話號碼", "公司名稱" ] if 'fields' not in st.session_state: st.session_state.fields = [{'name': '', 'type': data_types[0], 'min': None, 'max': None, 'decimal': 2}]
字段類型:支持多種常見類型,例如整數(shù)、浮點數(shù)、日期等。
初始字段:通過 st.session_state 初始化一個字段列表,用戶可以在此基礎(chǔ)上動態(tài)修改。
動態(tài)增減字段
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"數(shù)據(jù)種類 {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 提供數(shù)據(jù)類型下拉菜單。
刪除功能:每行字段配置支持一鍵刪除。
添加新字段
if st.button("?? 添加字段"): st.session_state.fields.append({'name': '', 'type': data_types[0], 'min': None, 'max': None, 'decimal': 2}) st.rerun()
用戶點擊按鈕即可添加新字段,并動態(tài)刷新頁面。
3. 針對特定字段類型的配置
對于某些字段類型(如整數(shù)、浮點數(shù)、日期等),我們允許用戶配置上下限或格式要求:
整數(shù)和浮點數(shù)的上下限
if field_type in ["整數(shù)", "浮點數(shù)"]: 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 == "浮點數(shù)": decimal_places = st.number_input("小數(shù)位", 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. 生成測試數(shù)據(jù)
用戶點擊按鈕后,根據(jù)字段配置生成測試數(shù)據(jù)。
if st.button("?? 生成數(shù)據(jù)"): generated_data = [] for _ in range(num_rows): row_data = {} for field in st.session_state.fields: type_ = field['type'] name = field['name'] # 根據(jù)字段類型生成數(shù)據(jù) if type_ == "整數(shù)": data = fake.random_int(min=field['min'], max=field['max']) elif type_ == "浮點數(shù)": 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. 數(shù)據(jù)導(dǎo)出
支持將生成的數(shù)據(jù)導(dǎo)出為 JSON、Excel、YAML、Markdown 文件。
# JSON 導(dǎo)出 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 導(dǎo)出 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 數(shù)據(jù),快速測試接口的邊界和異常處理能力。
性能測試:批量生成大規(guī)模數(shù)據(jù),用于測試系統(tǒng)的性能瓶頸。
功能測試:生成覆蓋多種場景的數(shù)據(jù),驗證系統(tǒng)的業(yè)務(wù)邏輯。
如果將其與 DeepSeek(假設(shè)為一個深度搜索與分析平臺)結(jié)合,則可以進(jìn)一步提升工具的智能化程度和效率,尤其是在數(shù)據(jù)挖掘和復(fù)雜場景的處理上。
四、結(jié)合 DeepSeek 的潛在優(yōu)勢
在傳統(tǒng)的測試數(shù)據(jù)生成器中,數(shù)據(jù)來源和生成邏輯通常是基于規(guī)則的。然而,測試需求可能更加復(fù)雜,例如:
生成符合特定規(guī)則的復(fù)雜數(shù)據(jù)(如跨字段關(guān)聯(lián)的數(shù)據(jù))。
從真實數(shù)據(jù)中提取模式,生成更加貼近實際業(yè)務(wù)的數(shù)據(jù)。
深入分析生成的數(shù)據(jù),確保其在覆蓋率和邏輯上的完整性。
結(jié)合 DeepSeek,可以實現(xiàn)以下功能突破:
1. 智能數(shù)據(jù)生成:基于真實數(shù)據(jù)的深度學(xué)習(xí)
DeepSeek 可以作為一個數(shù)據(jù)挖掘和模式識別引擎,幫助生成更貼近實際場景的數(shù)據(jù)。
如何實現(xiàn):
- 提供真實業(yè)務(wù)數(shù)據(jù)作為訓(xùn)練集,例如用戶行為日志、訂單數(shù)據(jù)等。
- DeepSeek 通過模式挖掘和分析,生成符合實際分布的數(shù)據(jù)生成規(guī)則。
- 測試數(shù)據(jù)生成器調(diào)用 DeepSeek 的 API,根據(jù)用戶配置的字段類型,從規(guī)則中生成更加逼真的測試數(shù)據(jù)。
場景示例:
- 生成符合復(fù)雜分布的用戶行為數(shù)據(jù)(如用戶訪問的時間間隔、購買頻率等)。
- 模擬特定用戶群的訂單數(shù)據(jù)(如高消費用戶與低消費用戶的特征完全不同)。
2. 動態(tài)數(shù)據(jù)擴(kuò)充:融合外部數(shù)據(jù)源
DeepSeek 可以實時搜索和分析外部數(shù)據(jù)源,為測試數(shù)據(jù)生成提供更多上下文信息。
如何實現(xiàn):
- 當(dāng)用戶配置字段時,允許選擇“動態(tài)擴(kuò)展數(shù)據(jù)”模式。
- DeepSeek 搜索和提取相關(guān)數(shù)據(jù)(如行業(yè)標(biāo)準(zhǔn)數(shù)據(jù)集、公開數(shù)據(jù)等)。
- 將提取的數(shù)據(jù)注入生成器中,作為測試數(shù)據(jù)的基礎(chǔ)。
場景示例:
- 生成包含真實地名、地址的物流測試數(shù)據(jù)。
- 提取公開的金融數(shù)據(jù)(如股票價格、匯率)生成金融測試數(shù)據(jù)。
3. 跨字段關(guān)聯(lián):復(fù)雜規(guī)則的數(shù)據(jù)生成
在傳統(tǒng)生成器中,字段往往是獨立生成的,但實際業(yè)務(wù)中,字段之間可能存在復(fù)雜的邏輯關(guān)系。
如何實現(xiàn):
- DeepSeek 構(gòu)建跨字段的規(guī)則引擎,用戶可以通過簡單的配置實現(xiàn)字段間的邏輯關(guān)聯(lián)。
- 測試數(shù)據(jù)生成器調(diào)用 DeepSeek 的規(guī)則引擎,動態(tài)生成符合邏輯的數(shù)據(jù)。
場景示例:
- 生成訂單數(shù)據(jù)時,確保“下單時間”早于“發(fā)貨時間”。
- 生成用戶數(shù)據(jù)時,確保“年齡”符合與“職業(yè)”之間的常識性匹配。
4. 智能化數(shù)據(jù)驗證與分析
DeepSeek 的分析能力可以用于驗證生成數(shù)據(jù)的質(zhì)量,確保測試覆蓋率和邏輯完整性。
如何實現(xiàn):
- 生成數(shù)據(jù)后,將其傳遞給 DeepSeek 進(jìn)行分析。
- DeepSeek 提供數(shù)據(jù)統(tǒng)計、分布可視化等功能,幫助用戶發(fā)現(xiàn)潛在問題。
- 根據(jù)分析結(jié)果,動態(tài)調(diào)整生成規(guī)則。
場景示例:
- 驗證是否生成了足夠的邊界值(如最小值和最大值)。
- 檢查數(shù)據(jù)是否符合業(yè)務(wù)分布(如電商訂單量的高峰時段是否合理)。
5. 實時場景模擬:從搜索到生成
DeepSeek 的實時搜索能力可以幫助用戶快速創(chuàng)建特定場景的測試數(shù)據(jù)。
如何實現(xiàn):
- 用戶輸入特定場景描述(如“模擬雙十一的電商訂單”)。
- DeepSeek 通過搜索和分析,理解場景需求,并生成測試數(shù)據(jù)生成規(guī)則。
- 測試數(shù)據(jù)生成器調(diào)用這些規(guī)則,生成符合場景的數(shù)據(jù)。
場景示例:
- 模擬高并發(fā)場景下的用戶登錄數(shù)據(jù)。
- 模擬節(jié)假日促銷期間的交易數(shù)據(jù)。
6. 隱私保護(hù)的數(shù)據(jù)生成
當(dāng)測試數(shù)據(jù)涉及敏感信息(如用戶數(shù)據(jù))時,DeepSeek 可以通過隱私保護(hù)技術(shù)(如差分隱私或聯(lián)邦學(xué)習(xí))生成脫敏數(shù)據(jù)。
如何實現(xiàn):
- 將敏感數(shù)據(jù)傳遞給 DeepSeek,利用隱私技術(shù)生成符合分布的合成數(shù)據(jù)。
- 測試數(shù)據(jù)生成器基于這些合成數(shù)據(jù)生成測試集。
場景示例:
生成脫敏的醫(yī)療數(shù)據(jù),用于測試醫(yī)療系統(tǒng)。
生成加噪處理的用戶數(shù)據(jù),用于數(shù)據(jù)分析工具測試。
五、結(jié)合 DeepSeek 的改進(jìn)架構(gòu)
結(jié)合 DeepSeek 后的測試數(shù)據(jù)生成器架構(gòu)如下:
用戶輸入:
- 配置字段類型、字段名、規(guī)則(如范圍、格式)。
- 選擇是否使用 DeepSeek 的高級功能(如真實數(shù)據(jù)生成、跨字段關(guān)聯(lián)、隱私保護(hù)等)。
DeepSeek 聯(lián)動:
- 根據(jù)用戶需求,DeepSeek 提供模式挖掘、規(guī)則生成或外部數(shù)據(jù)。
- 測試數(shù)據(jù)生成器調(diào)用 DeepSeek 的 API,動態(tài)調(diào)整生成邏輯。
數(shù)據(jù)生成:
基于用戶配置和 DeepSeek 提供的規(guī)則,生成測試數(shù)據(jù)。
數(shù)據(jù)驗證與導(dǎo)出:
DeepSeek 提供生成數(shù)據(jù)的分析報告。
用戶導(dǎo)出數(shù)據(jù)為 JSON、Excel、YAML 或 Markdown。
五、總結(jié)
通過結(jié)合 DeepSeek,測試數(shù)據(jù)生成器可以從規(guī)則驅(qū)動進(jìn)化到智能驅(qū)動,從而實現(xiàn)更高效、更精準(zhǔn)的數(shù)據(jù)生成。這種結(jié)合不僅能滿足復(fù)雜的測試需求,還能在數(shù)據(jù)生成、驗證、分析等環(huán)節(jié)提供全方位支持。對于測試工程師而言,這將是一款不可或缺的智能化工具。
到此這篇關(guān)于Python使用Streamlit打造高效的測試數(shù)據(jù)生成器的文章就介紹到這了,更多相關(guān)Python Streamlit測試數(shù)據(jù)生成器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python 隨機(jī)生成測試數(shù)據(jù)的模塊:faker基本使用方法詳解
- Python基于Hypothesis測試庫生成測試數(shù)據(jù)
- Python faker生成器生成虛擬數(shù)據(jù)代碼實例
- python利用faker庫批量生成測試數(shù)據(jù)
- Python-GUI?wxPython之自動化數(shù)據(jù)生成器的項目實戰(zhàn)
- Python生成器深度解析如何構(gòu)建強(qiáng)大的數(shù)據(jù)處理管道
- Python中如何生成GeoJSON數(shù)據(jù)
- 使用Python隨機(jī)生成數(shù)據(jù)的方法
- Python Faker批量生成測試數(shù)據(jù)的實現(xiàn)
相關(guān)文章
python opencv3實現(xiàn)人臉識別(windows)
這篇文章主要為大家詳細(xì)介紹了python opencv3實現(xiàn)人臉識別程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼
這篇文章主要介紹了Python 基于Twisted框架的文件夾網(wǎng)絡(luò)傳輸源碼,需要的朋友可以參考下2016-08-08Python數(shù)學(xué)建模學(xué)習(xí)模擬退火算法整數(shù)規(guī)劃問題示例解析
整數(shù)規(guī)劃問題在工業(yè)、經(jīng)濟(jì)、國防、醫(yī)療等各行各業(yè)應(yīng)用十分廣泛,是指規(guī)劃中的變量(全部或部分)限制為整數(shù),屬于離散優(yōu)化問題Discrete Optimization2021-10-10Windows環(huán)境下python環(huán)境安裝使用圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows環(huán)境下python安裝使用圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03Python 使用os.remove刪除文件夾時報錯的解決方法
下面小編就為大家?guī)硪黄狿ython 使用os.remove刪除文件夾時報錯的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01