11 个稳定版本
1.7.0 | 2024年1月5日 |
---|---|
1.6.0 | 2023年4月30日 |
1.5.0 | 2022年6月7日 |
1.3.1 | 2021年11月29日 |
1.0.0 | 2019年6月13日 |
#57 in 模板引擎
用于 runiq
31KB
360 行
Jen
Jen 是一个简单的(但可扩展的)用于生成大型随机数据集的工具。
Jen 是一个核心库和 CLI 的组合,用于根据模板生成随机数据集。虽然已经存在一些这样的工具,但它们大多数都在浏览器中运行,自然不足以生成大量数据。Jen 的创建是为了填补创建大量数据的空白,例如用于单元测试和数据库状态。
Jen 的底层模板语法由 Tera 驱动,以帮助熟悉并避免重新发明模板语言。在此之上,Jen 提供了许多围绕随机化数据的功能。其中一些功能基于 fake,并在存在空白的地方提供额外的功能。您在使用 Jen 时可以自然地附加自己的功能。
安装
Jen 可通过 Crates.io 获得,因此可以直接从那里安装。您可以将 Jen 作为命令行工具或直接通过程序 API 使用。
如果您想将 Jen 安装为命令行工具,您可以通过终端中的一行轻松安装
$ cargo install jen
如果您想将其作为库使用,可以将它添加到您的 Cargo.toml
中,作为您应用程序的依赖项
[dependencies]
jen = { version = "1.6", default-features = false }
您应该禁用默认功能,因为它包含多个依赖项,这些依赖项是 CLI 用例所需的。当禁用这些功能时,不会将依赖项包含在您的应用程序中。
用法
第一步是构建一个模板文件,Jen在生成数据时会使用这个文件。默认情况下,提供了许多模板助手,这些助手通过内部的jen::helpers
模块提供。您可以查看文档以获取最新的助手列表,尽管可以在下面找到相当最新的助手表。以下。一旦有了这个模板,您可以通过CLI或编程方式使用Jen。
命令行
CLI相当简单,其基本结构为
$ jen <template>
使用此语法将基于提供的模板(必须是一个有效的Tera模板)生成随机文档。在example
目录中有一个基本文档可以进行测试。
您可以通过提供以下选项来调整输出(在撰写本文时,可能有更多)
USAGE:
jen [FLAGS] [OPTIONS] <template>
FLAGS:
-h, --help Prints help information
-t, --textual Treat the input as textual, rather than JSON
-V, --version Prints version information
OPTIONS:
-l, --limit <limit> An upper limit of documents to generate
ARGS:
<template> Template to control JSON generation
尽管Jen可以处理任何输入格式,但它最初是针对JSON文档编写的。因此,Jen将自动尝试解析输入(生成后)为JSON,以便压缩并按行输出文档。这种检测有一定量的开销,可以通过提供-t
来跳过,如果您明确不希望将传入的数据视为JSON。
有关完整且最新的选项列表,请在终端中使用jen -h
。
编程API
编程API非常简单。一切通过使用Generator
结构体来处理,它实现了Iterator
特质以提供连续(懒)文档。
生成器通过磁盘上模板的路径构建,然后您可以使用以下所示的Iterator
方法生成文档。
let mut generator = Generator::load("./example/example.tera")
.expect("provided a value template");
for document in generator.take(5) {
println!("{}", document);
}
这将从提供的模板生成五个文档并将它们打印到终端。
模板助手
以下是在撰写本文时的当前助手列表。请参阅上传到Crates.io的文档以获取最新列表。
助手 | 描述 |
---|---|
bool() | 生成随机布尔值 |
city() | 生成随机城市名称 |
company() | 生成随机公司名称 |
domain() | 生成随机域名 |
email() | 生成随机电子邮件地址 |
firstName() | 生成随机名字 |
float(start=f64::MIN, end=f64::MAX) | 在两个边界之间生成随机浮点数 |
index() | 检索生成文档的当前索引 |
industry() | 生成随机行业类型 |
integer(start=i64::MIN, end=i64::MAX) | 在两个边界之间生成随机整数 |
lastName() | 生成随机姓氏 |
latitude() | 生成随机纬度位置值 |
longitude() | 生成随机经度位置值 |
name() | 生成随机全名 |
nanoid(length=21) | 生成给定长度的随机nanoid |
objectId() | 生成随机对象标识符 |
paragraph() | 生成随机Lorem Ipsum段落 |
phone() | 生成随机电话号码 |
postcode() | 生成随机邮政编码 |
profession() | 生成随机职业 |
random(values=["red","blue","yellow"]) | 从提供的值中检索随机值 |
sentence() | 生成随机Lorem Ipsum句子 |
state() | 检索随机美国州名 |
stateCode() | 检索随机美国州代码 |
street() | 生成随机街道名称 |
timestamp() | 生成一个以秒为单位的随机时间戳值 |
title() | 生成一个随机的职位名称 |
userAgent() | 生成一个随机的浏览器用户代理 |
username() | 生成一个随机的账户用户名 |
uuid() | 生成一个 v4 UUID |
word() | 检索一个 Lorem Ipsum 随机单词 |
zip() | 生成一个随机的美国邮政编码 |
依赖项
~12–22MB
~314K SLoC