go-faker

go-faker 能够生成各类 mock 数据,很适合用在测试场景中。

例如当你需要一个虚假的用户记录以便完成某种注册流程单元测试时,可以使用:

1
2
> docker run -it --rm hedzr/faker internet
{"Internet":{"DomainName":"ziemann.net","DomainSuffix":"com","DomainWord":"green","Email":"garry@hintz.biz","FreeEmail":"christian@yahoo.com","IpV4Address":"48.107.223.211","IpV6Address":"bc8e:e770:c962:4004:8045:86e2:2658:bfc7","MacAddress":"52:6b:0d:24:7d:67","Password":"Za9pR1hfV7yJXw3Mhf9I5EvL1uvo0M","SafeEmail":"sheridan.gibson@example.net","Slug":"adipisci-inventore","Url":"http://roobroberts.name/americo.lindgren","UserName":"lenny.trantow"}}

这样,你就可以得到一条用户记录,字段有限但差不多够用。

安装

采用 docker 运行的方式可以立即运行,只要你能够顺利拉取 docker hub 的镜像即可。

1
docker pull hedzr/faker

如果你更愿意从 GitHub 的 Registry 拉取镜像,也行:

1
docker pull ghcr.io/hedzr/cli/faker

如果你在使用 macOS 环境,可以通过 Homebrew 的方式安装:

1
2
3
4
5
6
7
8
brew tap hedzr/brew
brew install faker
# 或者直接:
brew install hedzr/brew/faker

# 然后
faker --help
...

但可能不能支持 M1 环境。

如果是其它 OS 环境,请通过 Releases 页面下载预编译的二进制包。

如果没有预先编译的二进制包的话,你只能通过编译源码的方式来获得你的可执行文件了,这需要你安装了 golang 编译环境:

1
go install github.com/hedzr/go-faker

上面的办法总有适合你的。

背景

go-faker 是通过 dmgk/faker 来实现的。我们版本仅仅只是一个有恰当外包装的可执行文件外壳。

go-faker 目前支持几乎所有的 dmgk/faker 数据,除了日期和时间,这两个数据的 mock 采用 OS 自带的 date 命令更为简便。

可用的 go-faker 命令如下:

1
> faker -h

image-20211124171924502

使用时可以是这样:

1
2
> faker addr
{"Address":{"BuildingNumber":788,"City":"East Geraldineside","CityPrefix":"North","CitySuffix":"land","Country":"Costa Rica","CountryCode":"BG","Latitude":82.16658,"Longitude":-89.001114,"Postcode":"95690-3954","PostcodeByState":64204,"SecondaryAddress":"Apt. 211","State":"Rhode Island","StateAbbr":"OR","StreetAddress":"10067 Jimmy Forge","StreetName":"Gleichner Vista","StreetSuffix":"Shoals","String":"95126 Kamren Haven Apt. 514, Port Joannyburgh Utah 96447","TimeZone":"Africa/Cairo","ZipCode":"58451-9050","ZipCodeByState":38836}}

也可以产出 yaml 格式等等。

命令行参数

恰当的外包装是指我们有一套符合直觉习惯,符合 POSIX 惯例的命令行参数供给方式。

以信用卡号码为例,可以这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
❯ ./bin/faker_darwin-amd64 f --visa --plain # shortcut to 'finance'
        visa : 4364442188476

❯ ./bin/faker_darwin-amd64 finance -m
    mastercard : 6771-8918-3284-3326

❯ ./bin/faker_darwin-amd64 finance --mastercard
{ "finance": { "mastercard": "5150-3577-9332-4378" } }

❯ ./bin/faker_darwin-amd64 finance --mastercard -yaml
finance:
  mastercard: 5480-4039-7556-4612

❯ ./bin/faker_darwin-amd64 finance --mastercard --json
{
  "finance": {
    "mastercard": "6771-8948-9019-6694"
  }
}

你可以选择所需的输出格式,json 或者 json-compact,又或者 yaml 格式。

对于 finance 命令来说,可以产出的信用卡号码格式如下,

image-20211124172205036

请自行抉择。

其它的 faked 记录采用相同的方式,所以这里不再罗列了。

你可以分别检视 go-fakerdmgk/faker 的主页来获知更多信息。

后记

早前有一次随意浏览时发现了 dmgk/faker 这个库,不过它要求我以编程方式来取得 mock 记录,所以有天晚上干脆就弄了个 CLI 壳,用作 curl 的 json 输入很便利。

然后又想到巷子太深,于是配一篇文章介绍吧,也许有人用得上呢。

II

月初由于特别原因,片区接近封锁,全员核酸,我们都在小心和放肆之间挨时间。后来大家都安全了。但引发的思考就不停歇:即使我再怎么小心翼翼,也抵挡不了莫名其妙而来的时空重叠所带来的后果,所以,怎么办呢。

但是,现在又已经回到了放肆的氛围了。

还是继续更新这里吧,只要聚焦在代码之中,想不通的事情自然可以不必想。

🔚