不止是地址:Address 合成测试数据(人物/银行卡/就业/网络)设计完全解读
【免费下载链接】addressA self-hosted address and synthetic test-profile generator for 27 countries and regions, built from real open-data streets, administrative areas, coordinates, and postcodes. Supports multilingual output, IP-nearby generation, map previews, and API access. 基于真实开放数据的自托管地址与合成测试资料生成器,覆盖 27 个国家和地区,支持多语言地址、IP 附近生成、地图预览与 API 调用项目地址: https://gitcode.com/gh_mirrors/address4/address
做前后端测试时,你大概率填过这种假数据:随手编的地址、乱写的手机号、随便敲的银行卡号。问题是——这些"假数据"往往假到能瞬间暴露问题:手机号不符合国家号段、银行卡过不了 Luhn 校验、地址在地图上找不到。Address 是一个自托管的地址与合成测试资料生成器,覆盖 27 个国家和地区:它先给你一条真实存在的地址,再自动配套生成一套与地址"逻辑自洽"的合成测试数据——人物画像、银行卡、就业、网络信息,全部可复现、可多语言展示。这篇文章带你完整拆解它的合成数据设计思路。
一次生成,得到一整套测试数据包
调用/generate接口(或在 Web 界面点击"Random address")后,返回的不只是一条地址,而是一个完整的测试数据包(GeneratedBundle):
| 模块 | 内容 | 特点 |
|---|---|---|
| 📍 地址 | 街道、门牌、邮编、经纬度 | 来自真实开放数据,缺什么就留空,绝不编造 |
| 👤 人物 | 姓名、性别、邮箱、手机号、出生日期 | 姓名用国家母语语料,手机号符合该国号段规则 |
| 🏦 银行卡 | 卡组织、卡号、有效期、CVC | 带 Luhn 校验位,仅测试用途 |
| 💼 就业 | 职业、公司、部门、公司规模、月薪 | 与学历、年龄强关联 |
| 💰 财务 | 账户名、收入区间、交易描述 | 币种匹配所在国 |
| 🌐 网络 | 用户名、测试密码、User-Agent、UUID、IP、MAC | IP 只用文档保留段,不会撞真 IP |
数据包中地址是真实的,其余字段是合成数据,两者相互独立但不矛盾——这正是它和普通"假数据生成器"最大的区别。字段定义可查阅 src/domain/types.ts,接口行为见 docs/API.md。
人物与就业数据:让数据"讲得通"
多数生成器是"字段级随机":年龄 20 岁、职业却是"临床心理学家"、学历博士——一眼假。Address 的做法是链式约束:
- 年龄决定学历:21 岁以下不可能有本科学历,28 岁以下博士几乎为零,权重随年龄解锁(见 profile-model.ts);
- 学历决定职业池:只有"学历 ≥ 职业要求且相差不超过一级"的职业才进入候选,硕士可能当产品经理,但高中生不会;
- 年龄决定就业状态:22 岁以下大概率是学生,65 岁以上退休概率 72%;
- 职业+年龄+国家决定薪水:以该国中位月薪为基准,乘职业系数(0.72~1.7)、年龄系数,再随机浮动 ±15%。
身高体重也按国家和性别做了正态分布(荷兰男性平均 183cm、菲律宾 165cm 这类细节都区分了),血型分布甚至区分了东亚地区 Rh 阴性更稀少的特点。
银行卡与网络数据:安全与合规的小心思
- 卡号能过校验:随机选 Visa(4 开头)或 Mastercard(51–55、2221–2720)前缀,中间随机,最后一位用 Luhn 算法算出校验位,再按 4-4-4-4 分组——支付表单的格式校验直接能过(sandbox-card.ts)。有效期固定在"今天+2~5 年",永远不会生成已过期卡。
- IP 永远安全:网络模块里的 IP 只从 RFC 5737 文档保留段(
192.0.2.x等)中取,不会和任何真实用户撞车;MAC 地址则置位"本地管理"标志位,同样避免冲突。 - 测试密码可读:用"名词+名词+数字+符号"模式(如
AmberWillow42!),方便人工测试时记忆,又不至于太弱。
一致性细节:同一批数据的"隐形胶水"
真正让这批合成数据"可信"的,是一堆容易被忽略的联动:
- 姓名→邮箱/用户名:邮箱和用户名都从姓名派生,日本/越南姓名"姓在前",中日韩直接拼接不加空格,姓名格式符合当地习惯(generator.ts);
- 地址→电话区号:美国/加拿大的手机区号会匹配地址所在城市——西雅图的地址配 206 区号,而不是随便一个区号;
- 手机号真实性校验:生成后逐国用号码元数据验证(128 次重试),还专门排除了英国的"影视专用段";
- 账户名带人名:银行账户显示名为"姓名 · 活期账户",交易描述配一个随机商户名,看起来像真实账单。
可复现:同一个 seed,同一套测试数据
回归测试最怕"数据每次都变"。Address 的所有合成数据都由一个seed驱动:seed 与地址 ID 哈希后作为随机数种子,喂给同一套确定性随机源。这意味着:
- 相同 seed + 相同地址 = 完全相同的人物、银行卡、网络数据,可用于自动化断言;
- 不同 seed = 全新但同样自洽的数据包,可用于批量造数;
- 批次接口(
POST /generate/batch)支持unique去重,一次生成最多 50 条互不重复的记录。
确定性行为有专门测试守护:tests/generator-determinism.test.ts、跨语言一致性测试见 tests/profile-multilingual.test.ts。
多语言展示:9 种语言的"本地人格"
合成数据还自带 9 种语言的本地化呈现(profile-presentations.ts):账户类型翻译成"活期账户/Girokonto/Compte à vue"等当地叫法,"银行卡消费"的交易描述跟随语言切换,连宠物名答案(安全问题的答案之一)都有各语言版本。测试国际化表单、本地化文案时非常顺手。
适用场景速查
- ✅ 表单/注册流程测试:姓名+邮箱+手机号+地址一步到位
- ✅ 支付/金融流程:Luhn 合法的测试卡 + 收入区间
- ✅ 地理功能测试:真实坐标 + 地图链接,区号与城市匹配
- ✅ 国际化/本地化测试:9 语言展示,姓名格式符合当地习惯
- ✅ 自动化回归:seed 复现,断言稳定
部署方式、API 参数与错误码详见 docs/DEPLOYMENT.md 与 docs/API.md,数据源清单见 docs/data-sources.md。一句话总结:Address 把"造假数据"做成了"造一套自洽的小社会"——地址是真的,人是合理的,卡片是能过校验的,而且永远可复现。
【免费下载链接】addressA self-hosted address and synthetic test-profile generator for 27 countries and regions, built from real open-data streets, administrative areas, coordinates, and postcodes. Supports multilingual output, IP-nearby generation, map previews, and API access. 基于真实开放数据的自托管地址与合成测试资料生成器,覆盖 27 个国家和地区,支持多语言地址、IP 附近生成、地图预览与 API 调用项目地址: https://gitcode.com/gh_mirrors/address4/address
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考