ohos-sdk配置Cargo 链接器,实现Rust三方库fake打造用于快速生成各类测试虚拟数据
欢迎加入开源鸿蒙PC社区: https://harmonypc.csdn.net/
欢迎在PC社区平台申请新建项目:https://atomgit.com/OpenHarmonyPCDeveloper
AtomGit 仓库地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_rust_cargo
本文讲解鸿蒙 PC 端 Rust 开发环境搭建,鸿蒙基于 musl 库、强制二进制签名,无法直接使用通用 Linux 编译产物。需借助鸿蒙专属包管理器 Harmonybrew,提供两套编译方案:方案一安装 llvm-gcc-compat,零配置开箱即用;方案二仅安装 ohos-sdk,需手动配置 Cargo 链接器,二者都依托 ohos-sdk 完成自动签名编译。
完整的过程可以参考一下:
【OpenHarmony 鸿蒙 PC + CodeArts IDE 实现 Rust开发完整开发环境搭建指南】
fake 库介绍(Rust)
一、作用说明
fake 是 Rust 专用模拟假数据生成库,用于快速生成各类测试虚拟数据,解决开发、单元测试、Mock 接口造测试数据的需求。
核心能力:
- 个人信息:姓名、手机号、身份证、邮箱、地址、生日、用户名、密码
- 互联网数据:URL、域名、IP、UUID、随机文本、段落
- 业务数据:公司名、职位、商品名称、价格、订单号
- 本地化支持:支持中文/英文等多语言假数据
适用场景:单元测试造批量数据、接口 Mock、数据库测试填充、Demo 演示造样例数据
二、安装命令
cargo add fake --features uuid
cargo add uuid

三、Cargo.toml 依赖
[dependencies]
fake = { version = "2.9", features = ["zh_CN"] }
四、完整可运行无报错示例代码
use fake::faker::{
lorem::raw::Paragraph,
name::raw::{FirstName, LastName, Name},
phone_number::raw::PhoneNumber,
internet::raw::FreeEmail,
};
use fake::locales::ZH_CN;
use fake::{Fake, Faker};
use uuid::Uuid;
fn main() {
// 中文个人信息
let full_name: String = Name(ZH_CN).fake();
let first_name: String = FirstName(ZH_CN).fake();
let last_name: String = LastName(ZH_CN).fake();
let phone: String = PhoneNumber(ZH_CN).fake();
let email: String = FreeEmail(ZH_CN).fake();
println!("===== 中文个人信息 =====");
println!("完整姓名:{}", full_name);
println!("姓:{} 名:{}", last_name, first_name);
println!("手机号:{}", phone);
println!("邮箱:{}", email);
// UUID、IPv4
let uuid_val: Uuid = Faker.fake();
let ipv4: std::net::Ipv4Addr = Faker.fake();
println!("\n===== 网络标识 =====");
println!("UUID:{}", uuid_val);
println!("IPv4地址:{}", ipv4);
// 随机文本段落(必须传区间 Range)
let para: String = Paragraph(ZH_CN, 2..4).fake();
println!("\n===== 随机文本 =====");
println!("段落:{}", para);
// 随机数字、价格【修复:括号包裹Range再调用.fake()】
let rand_int: u32 = (1..10000).fake();
let price: f64 = (10.0..999.99).fake();
println!("\n===== 数字数据 =====");
println!("随机整数:{}", rand_int);
println!("商品价格:{:.2} 元", price);
// 批量生成5个用户
println!("\n===== 批量测试用户 =====");
for i in 1..=5 {
let uname = Name(ZH_CN).fake::<String>();
let tel = PhoneNumber(ZH_CN).fake::<String>();
println!("用户{}:姓名={} 电话={}", i, uname, tel);
}
}

一、先回顾依赖 Cargo.toml
fake = { version = "5.1", features = ["uuid"] }
uuid = "1.8"
fake:Rust 假数据生成库,用于造测试模拟数据features = ["uuid"]:开启内置 UUID 随机生成支持uuid:标准 UUID 类型定义库
二、顶部导入语句分段解析
use fake::faker::{
lorem::raw::Paragraph,
name::raw::{FirstName, LastName, Name},
phone_number::raw::PhoneNumber,
internet::raw::FreeEmail,
};
模块层级说明
fake::faker = 所有假数据生成器的根目录,里面分各类业务模块:
lorem::raw::Paragraph
生成随机中文段落文本,构造时需要传入语言包+句子数量区间name::raw::{FirstName, LastName, Name}- FirstName:名
- LastName:姓
- Name:完整姓名(姓+名)
phone_number::raw::PhoneNumber
随机手机号/电话号码internet::raw::FreeEmail
随机免费邮箱地址(qq/163/gmail 等)
后缀 raw:底层原始生成器结构体,必须搭配地区语言常量(ZH_CN)使用。
use fake::locales::ZH_CN;
locales = 语言地区包ZH_CN:公开常量,代表简体中文,传给生成器就能输出中文假数据;
如果换成 EN 就是英文数据。
use fake::{Fake, Faker};
Faketrait:核心特征,只要实现该 trait 的类型都能调用.fake()生成随机值Faker:全局默认随机生成器,无参、不需要语言包,生成通用基础类型(数字、IPv4、UUID)
use uuid::Uuid;
标准 UUID 唯一标识类型,用于接收 Faker.fake() 生成的随机唯一ID。
三、main 函数代码逐块拆解
1. 中文个人信息块
let full_name: String = Name(ZH_CN).fake();
let first_name: String = FirstName(ZH_CN).fake();
let last_name: String = LastName(ZH_CN).fake();
let phone: String = PhoneNumber(ZH_CN).fake();
let email: String = FreeEmail(ZH_CN).fake();
语法模板统一规则
生成器结构体(语言包).fake::<返回类型>()
Name(ZH_CN):构造中文姓名生成器实例.fake():调用 Fake trait 方法,自动生成随机字符串- 类型标注
:String告诉编译器返回值类型,也可以显式写.fake::<String>()
作用:一次性生成中文全名、姓氏、名字、手机号、邮箱,多用于用户测试数据。
2. UUID + IPv4 网络标识
let uuid_val: Uuid = Faker.fake();
let ipv4: std::net::Ipv4Addr = Faker.fake();
Faker不需要传语言包,专门生成通用无语言属性的基础类型- Uuid:全局唯一标识符,日志、订单、用户ID常用
- Ipv4Addr:标准 IPv4 地址类型,生成随机内网/公网IP
3. 随机中文段落
let para: String = Paragraph(ZH_CN, 2..4).fake();
Paragraph段落生成器需要两个参数:语言包 + 句子数量区间2..4:Range 区间,表示段落包含 2~4 句中文- 用途:模拟商品描述、评论、文章测试文本
4. 区间随机数字 & 价格(重点语法坑说明)
let rand_int: u32 = (1..10000).fake();
let price: f64 = (10.0..999.99).fake();
关键语法知识点
Rust 运算符优先级:. 高于 ..
如果写成 1..10000.fake(),编译器会理解成 1..(10000.fake()),直接类型报错。
必须用括号包裹完整区间 (起始..结束).fake()。
(1..10000).fake():生成 1 ~ 9999 的随机无符号整数(10.0..999.99).fake():生成 10 ~ 999.99 的随机浮点数,模拟商品价格
5. 批量循环生成测试用户
for i in 1..=5 {
let uname = Name(ZH_CN).fake::<String>();
let tel = PhoneNumber(ZH_CN).fake::<String>();
println!("用户{}:姓名={} 电话={}", i, uname, tel);
}
1..=5:闭区间循环,循环 1、2、3、4、5 五次.fake::<String>():尖括号显式指定返回类型,等价于变量前标注:String- 业务场景:批量造数据库测试用户、批量Mock接口请求参数
四、整体业务使用场景总结
- 单元测试:不用手写固定测试数据,每次自动生成不重复模拟用户
- 接口Mock:调试后端接口时,快速构造大量随机入参
- 数据库填充:初始化测试库批量插入虚拟用户、订单数据
- 演示Demo:页面展示样例数据,避免写死真实信息
五、核心API规律总结
- 带语言(中文/英文)的业务数据(姓名、手机号、文本):
生成器(ZH_CN).fake() - 无语言通用基础类型(IP、UUID、随机数字):
Faker.fake()/(区间).fake() - 所有生成逻辑都依赖
Faketrait,统一.fake()生成随机值 - ZH_CN 简体中文常量,fake 5.x 内置无需额外开启feature
补充说明
- 特性说明
- 默认不带地区,生成英文数据;开启
zh_CN才能输出中文姓名、地址、手机号、身份证; - 内置
Faketrait,所有假数据类型都可直接调用.fake()快速取值。
- 默认不带地区,生成英文数据;开启
- 随机种子控制(固定复现测试数据)
use fake::{Fake, StdRng};
use rand::SeedableRng;
fn fixed_seed_demo() {
// 固定种子,每次运行生成一模一样的数据
let mut rng = StdRng::seed_from_u64(123456);
let name: String = zh_CN::Name::Name.fake_with_rng(&mut rng);
println!("固定种子姓名:{}", name);
}
- 常见使用场景简化写法
任意范围数字、布尔值直接(min..max).fake(),不用额外导入模块,适合快速造测试参数。
更多推荐

所有评论(0)