AI Test Data Generation — 用 LLM 生 realistic 假資料的完整 workflow
用 LLM 生 test data 的完整指南。Synthetic data vs Faker、Domain-aware generation、Edge case coverage、Privacy-safe production sampling、Schema-aware、Cost optimization、
💡 本文原刊於 qa.9niche.com,2026-08 併入 9niche.com 懶人包,內容照原文完整搬遷。
目錄
1. 前言
「Faker 給的測試資料太假、跑不出真實 bug」是 QA 常痛。LLM 能生 business-realistic 假資料、抓出 Faker 抓不到的 edge case。這篇給你完整 workflow + Cost optimization。
2. 為什麼 Faker 不夠
3. LLM 生 test data 的 5 種場景
4. Workflow 1: Schema-aware 生成
from openai import OpenAI
from pydantic import BaseModel
from typing import List
class Order(BaseModel):
order_id: str
customer_email: str
items: List[str]
total_usd: float
status: str
created_at: str
class TestDataResponse(BaseModel):
orders: List[Order]
client = OpenAI()
def generate_test_orders(count=20, persona="VIP 客戶"):
response = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[
{"role": "system", "content": "你生 e-commerce 測試訂單。資料要 business-realistic、不是純隨機。"},
{"role": "user", "content": f"""
產 {count} 個 {persona} 訂單。
條件:
- email 用 [email protected] 格式
- 金額分佈 realistic(VIP 平均 $300、有 outlier $5000)
- items 是真實電子產品名(iPhone / MacBook / AirPods 等)
- status 70% paid / 20% pending / 10% refunded
- created_at 在過去 30 天
"""},
],
response_format=TestDataResponse,
)
return response.choices[0].message.parsed.orders
強制 schema = 100% valid JSON、不用後處理。
5. Workflow 2: Edge Case 列舉
EDGE_CASE_PROMPT = """
針對 e-commerce 訂單系統的「商品價格」欄位、列出 30 個 edge case 測試值。
涵蓋:
- 邊界(0, -1, 0.001, 999999.99)
- 特殊字元(含貨幣符號 / 千分位)
- 跨地區(USD / TWD / EUR)
- 攻擊(SQL injection / overflow / underflow)
- 文化(阿拉伯數字 / 中文「壹仟」)
回 JSON array、每項含:
- "value": 測試值
- "category": "boundary" / "special" / "locale" / "attack" / "cultural"
- "expected_behavior": "accept" / "reject" / "normalize"
- "reason": 為什麼測這個
"""
LLM 出 30 個你想不到的 case、人工 review 留下 20 個 → 加進 test suite。
6. Workflow 3: Production Data Anonymization
安全做法
def generate_synthetic_users(count=1000, stats=None):
"""
從 prod 統計分佈(不含個資)生 synthetic data
stats: {"age_mean": 35, "age_std": 12, "city_dist": {"Taipei": 0.4, ...}}
"""
response = llm.complete(f"""
Generate {count} synthetic users matching these distributions:
{json.dumps(stats)}
Use Faker-style fake names / emails.
Do NOT use any real person's data.
""")
return parse(response)
永遠用 differential privacy 思維:synthetic data 不能逆推到任何真人。
7. Workflow 4: Multilingual / Localization
def generate_l10n_users(locales=["zh-TW", "ja-JP", "ar-SA", "de-DE"], per_locale=50):
all_users = []
for locale in locales:
prompt = f"""
產 {per_locale} 個 {locale} 使用者測試資料。
- 姓名要 culturally appropriate
- 地址符合該國格式
- 電話符合該國格式
- 中東 RTL 場景必涵蓋
"""
users = llm_generate(prompt)
all_users.extend(users)
return all_users
抓 i18n bug(RTL / 字串展開 / 日期格式)必備。
8. Workflow 5: Adversarial / Security
ADVERSARIAL_PROMPT = """
產 50 個惡意輸入測試 user input 欄位(如註冊 email / 名字)。
涵蓋:
- SQL injection (' OR 1=1--)
- XSS (<script>alert(1)</script>)
- LDAP injection
- Path traversal (../../etc/passwd)
- Unicode normalization attack
- Buffer overflow (超長字串)
- Prompt injection (給 LLM-backed 系統)
- NoSQL injection
- 控制字元 (null byte / CRLF)
回 JSON array、含 "payload" 和 "category"。
"""
9. Cost Optimization
Tier Strategy 範例
# Tier 1: 100 筆「seed」用 GPT-4 高品質
seeds = generate_with_gpt4(count=100, prompt=detailed_prompt)
# Tier 2: 用 seeds 程式擴增到 10000 筆
import random
def augment(seeds, target=10000):
expanded = []
for _ in range(target):
base = random.choice(seeds)
new = base.copy()
# 程式變化
new["order_id"] = generate_uuid()
new["total"] += random.uniform(-50, 50)
new["email"] = f"qa-test-{uuid()}@example.com"
expanded.append(new)
return expanded
成本從 $50 → $0.50。
10. Quality 驗證
def validate_generated_data(data, schema):
"""驗證生成資料品質"""
issues = []
# 1. Schema valid
for item in data:
try:
schema.validate(item)
except ValidationError as e:
issues.append(f"Schema fail: {e}")
# 2. 唯一性(避免 LLM 重複輸出)
ids = [item["id"] for item in data]
if len(ids) != len(set(ids)):
issues.append("Duplicate IDs detected")
# 3. 分佈合理(avoid mode collapse)
dist = Counter(item["status"] for item in data)
if max(dist.values()) / len(data) > 0.9:
issues.append(f"Mode collapse: {dist}")
# 4. 沒有真實 PII(檢查)
for item in data:
if not is_synthetic_email(item.get("email", "")):
issues.append(f"Possible real email: {item}")
return issues
11. CI 整合
name: Generate Test Data
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * 0' # 每週日重新生
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: pip install -r requirements.txt
- run: python scripts/gen_test_data.py --count 1000
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- run: python scripts/validate_data.py test-data.json
- uses: actions/upload-artifact@v4
with:
name: test-data
path: test-data.json
retention-days: 30
12. 工具地圖
| 工具 | 用途 |
|---|---|
| Outlines | LLM structured output、強制 schema |
| Instructor | Pydantic + LLM、type safety |
| Faker | 傳統 random data(補位) |
| Mostly AI | 商用 synthetic data |
| Gretel.ai | 隱私安全 synthetic |
| Synthesized | 企業向 |
| OpenAI function calling | Structured JSON output |
| Anthropic Tool Use | Same |
13. 反模式
14. 跟 Test Data Management 串聯
LLM 生 data → 用 Test Data Management strategies 管理(Fixture / Factory / Seed)。
15. 給 QA 的 5 句
- LLM 生 business-realistic data、Faker 補格式
- 永遠強制 schema constraint
- Tier strategy 省 100x 成本
- Prod data 含 PII 一律 anonymize
- 生完一定要驗證唯一性 + 分佈 + 不含真人
16. 最後
AI Test Data Generation 是 QA 跨進 AI 領域最快上手的技能。比測 LLM 系統簡單、但效果立刻看見。從建一個 schema + 用 OpenAI function calling 生 100 筆起步、你的 test data 品質會從「能跑」躍升到「能抓真 bug」。
延伸:
- Test Data Management
- 用 LLM 生 Test Case
- Test Data 產生器(純前端工具)
相關連結
自動化測試最大坑:test data 管理。Fixture vs Factory vs Mother、Seed 策略、cleanup 模式、跨環境資料、敏感資料處理。附 pytest / Playwright 範例。
把 Claude / ChatGPT 變成測試案例產生器。從 spec 到 test case 的 prompt 範本、輸出品質檢核、什麼能交給 AI、什麼不能。
QA 不寫 code 也要 review PR。這篇教你用 AI 跑 PR review:三層分工(AI 抓語法、你抓風險)、用 LLM 算 diff 的 regression blast radius、找漏掉的 test、CodeRabbit 設定、以及別被 100 條 nitpick 淹沒的反模式。
相關懶人包
2026 QA 趨勢實戰:我看到的 5 個轉變(AI、Shift-Left、Observability)
從手動 QA 到 AI 輔助、從測試金字塔到測試獎盃。這篇分享我這 10+ 年看 QA 從「測完才知道」到「shift-left + AI」的真實觀察。
AI / LLM 功能 Spec Review — 幻覺 / 評估 / 成本 / 法遵 8 個必問
AI 功能 spec review 完整指南。LLM 不確定性處理、評估指標、Prompt versioning、成本控制、安全護欄、法遵(EU AI Act / GDPR)、Fallback、人工 review 流程。
AI Agent 系統測試 — 自主執行 / 工具呼叫 / 多步推理的 QA 策略
測試 AI Agent 完整方法。Tool calling 驗證、Trajectory 評估、Failure mode 分類、無限迴圈防止、成本上限、安全 sandbox、Multi-agent 協作測試。
一般聲明
本站提供之資訊僅供參考,不保證其完整性與正確性。使用者應自行判斷資訊之適用性。