Python3 的模拟数据(JSON)生成工具。
pip install mockee
from mockee import Mockee
# 加载指定的定义文件
mock = Mockee('/path/to/deffile.json')
# 生成数据
data = mock.make('GET:/api/test', {
# 当时间/日期数据项表达式为 auto 时的自动计算使用,此情况下必传的
'date_range': ['2020-01-01', '2020-12-31'],
# 指定 date_range 中传入的日期格式
# 不指定时为 %Y-%m-%d %H:%M:%S
# 不会影响生成的日期数据格式
'date_fmt': '%Y-%m-%d',
# 整数自增长的基数(从此数值开始自增),不指定时为 `0`
'i_base': 0
})
/path/to/deffile.json
是模拟数据定义文件GET:path
叫做数据标识,一般由请求的 method+url 组成data
生成的数据。当未找到对应的声明时,返回 None
在数据定义中,包含以下4类文件:
Mockee
实例时应当传入 见 defs.json
{
"GET:/api/test": {
"def": {},
"len": 10
}
}
GET:/api/test
数据标识def
描述返回的字段集合len
描述返回的数组长度,值为 0
时返回对象包含
GET:/api/test
的叫做 入口定义文件
格式:#>(i|f|b|s|j|d|t|dt|ref) exp
当一个值使用 #>
开头,表示这个值应该是一个生成的值(如 "value": "#>i 1-5"
);否则值为声明的值(如 "type": 2
)。
#>i:1-5
叫做 值表达式,用于描述应该如何来生成一个随机的值。
参考
#>
后面,紧跟的是数据类型,可用的数据类型描述如下:
i
整数值f
小数值b
布尔值s
字符串j
JSONd
日期值t
时间值dt
日期时间值ref
引用外部定义文件(实现相同定义的复用)如果其值为数组,那么在 key 名称后紧跟 [3]
写法,如 iValue[3]
。
[3]
表示此值为数组,且其中包含 3
项。
当且仅当值表达式有效
类型后面,应该紧跟一个空白字符。
再后面,是值描述,其分为两种数据模式,范围和枚举:
范围(随机 生成 值):
1-5
(包含 1
但不包含 5
) 这样的方式指定范围 #>i 1-5
#>f 0.2-0.8
20200101-20201231
这样的方式指定范围 #>d 20200101-20201231
000000-235959
这样的方式指定范围 #>t 000000-235959
20200101000000-20201231235959
这样的方式指定范围 #>dt 20200101000000-20201231235959
l
(小写字母), L
(大写字母), n
(数字), s
(符号) 组合起来描述 #>s lLns
(包含字母,数值和符号) #>s lLn
(包含字母,数值)对于类型 i
,可以这样写 #>i auto
,这表示使用自增长的整数。
此时需要在 options
中传入 i_base
作为自增长的基数(从此数值开始自增),不指定时为 0
原则上只允许出现一次
#>i auto
,当出现多次时,其值相同。
对于类型 d/t/dt
,有些特殊的写法 #>dt auto->%Y-%m-%d
:
#>dt auto
。->%Y-%m-%d
的方式指定日期格式化串。其写法遵守 Python 日期格式化 strftime 写法。枚举(随机从给定的值中 选择 值),所有类型使用相同的写法:
#>i (1,2, 4, 6, 8)
也可以从指定的文件加载枚举值(所有类型都支持):
#>s (#choices.txt#)
enum-filename
为枚举文件名,其中每行存放一个数据项,其中不允许出现空行。
无论是范围还是枚举,值不允许出现空白字符
可以使用 #>j json.json
这样的写法来指定从一个 JSON 文件中读取所有数据。
j
表示此字段的值是一个JSON结构json.json
是要读取的文件名。注意:json文件的扩展名必须为 .json
json.json
文件的根可以是对象或者数组也可以使用 #>j (#json.json#)
这样的写法,指定从一个 JSON 文件(数组)中随机选择数据
json.json
文件的根必须是数组此类型仅支持从文件读取。
使用写法 #>ref datetime.json
以引入一个外部的数据结构定义。
外部的数据结构定义(datetime.json)与入口定义文件的不同之处在于,其只包含定义部分(值为一个对象),不包含数据长度和入口名称等信息。
参考
其文件名应该是一个相对于 入口定义文件 的路径。
入口定义文件 的 def
项的值,也可以使用此处的引用写法。
扩展是在同级别添加数据项。
单个扩展写法:
{
"#ext#": "ext.json"
}
多个扩展写法:
{
"#ext#": ["ext1.json", "ext2.json"]
}
如果扩展中包含的项已经存在于当前定义,那么会被忽略(即当前文件的定义优先于扩展文件内的定义)。
参考
引用类型 和 定义扩展 的文件结构是一致的,其差异仅在引入的方式。
?
结尾表示数据不能重复此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。