5 个版本
0.2.0 | 2021年2月4日 |
---|---|
0.1.21 | 2020年12月6日 |
0.1.20 | 2020年12月6日 |
0.1.19 | 2020年11月28日 |
0.1.0 | 2020年4月26日 |
#480 在 测试
每月 28 次下载
37KB
513 行
jtd-fuzz

jtd-fuzz
从 JSON 类型定义模式生成示例数据 (也称为 "fuzz 测试")。
echo '{ "elements": { "type": "string" }}' | jtd-fuzz -n 5
["_","/+Z`","8o~5[7A"]
[]
["@(;","*+!YVz"]
["u4sv>Sp","Uc","o`"]
["","G","*ZJsc","","","\"RT,","l>l"]
安装
在 macOS 上,您可以通过 Homebrew 安装 jtd-fuzz
。
brew install jsontypedef/jsontypedef/jtd-fuzz
对于所有其他平台,您可以从 最新版本 下载并解压二进制文件。您也可以通过运行 cargo
来安装。
cargo install jtd_fuzz
用法
基本用法
要调用 jtd-fuzz
,您可以选择以下方式之一:
- 让它从 STDIN 读取。这是默认行为。
- 让它从文件读取。为此,将文件名作为
jtd-fuzz
的最后一个参数传递。
jtd-fuzz
读取单个 JSON 类型定义模式,并将默认输出无限流示例。例如,这将输出无限序列的随机 JSON 数据
echo '{}' | jtd-fuzz
如果您想让 jtd-fuzz
输出确切数量的结果,请使用 -n
echo '{}' | jtd-fuzz -n 5
或者,要让 jtd-fuzz
从文件读取
echo '{ "type": "timestamp" }' > foo.jtd.json
jtd-fuzz -n 5 foo.jtd.json
使用 fuzzHint
生成电子邮件、姓名等
通常,对于 jtd-fuzz
生成特定类型的字符串是有用的,而不是默认情况下通过 {"type": "string"}
得到的通用无意义字符串。您可以使用 fuzzHint
元数据属性自定义 jtd-fuzz
的输出。例如,这个模式
{
"metadata": {
"fuzzHint": "en_us/internet/email"
},
"type": "string"
}
如果将其放入名为 example.jtd.json
的文件中,将生成如下数据
jtd-fuzz -n 5 example.jtd.json
"[email protected]"
"[email protected]"
"[email protected]"
"[email protected]"
"[email protected]"
fuzzHint
只会在 {"type": "string"}
的模式上工作。以下是 fuzzHint
常用的值
en_us/company/company_name
生成如Hayes, Murray, and Kiehn
的字符串en_us/internet/email
生成如alainatorphy@johnson.com
的字符串en_us/names/full_name
生成如Alexa Wisozk
的字符串
有关 fuzzHint
可能的所有值的完整列表,请参阅 此处。
高级用法:提供种子
默认情况下,jtd-fuzz
每次都会生成不同的输出
echo '{}' | jtd-fuzz -n 1 ; echo '{}' | jtd-fuzz -n 1
{"[jD|6W":null}
null
如果您想从 jtd-fuzz
获取一致的输出,或者能够重现其输出,您可以使用 -s
选项为其内部伪随机数生成器提供一个种子。对于相同的种子和模式,jtd-fuzz
每次都会输出相同的数据
echo '{}' | jtd-fuzz -n 1 -s 8927 ; echo '{}' | jtd-fuzz -n 1 -s 8927
48
48
-s
选项接受一个介于 0 和 2^64 - 1 之间的整数。
为 jtd-fuzz
提供种子如果使用 jtd-fuzz
对系统进行自动化测试时非常有用。您的自动化测试系统可以向 jtd-fuzz
传递随机生成的种子,如果自动化测试器发现一个种子可以揭示一个错误,它可以输出它使用的种子。这样,开发者就可以重新使用该种子,并尝试在本地重现问题。
请注意,只有当您使用相同的种子、模式和 jtd-fuzz
的版本时,jtd-fuzz
才能保证产生一致的输出。不同版本的 jtd-fuzz
可能会输出不同的结果,即使您给出了相同的种子和模式。
安全考虑
不要依赖 jtd-fuzz
作为密码学安全的随机数源。jtd-fuzz
意在用作示例数据生成器,例如用于模糊测试应用程序。它不是为了加密目的而设计的。
依赖项
~2.8–4MB
~70K SLoC