yapi中使用json-schema mock数据

时间:2024-05-20 11:24:57

1. 基本的json-schema mock

首先,我们建立一个简单的json-schema,如下图所示:
yapi中使用json-schema mock数据
该schema定义了一个返回结构,包括两个字段,data为string类型,code为integer类型。
点击“预览”,可以看到类似下面的mock数据:

{
  "data": "non id",
  "code": -12100200
}

这就是最基本的mock, 即根据数据类型返回随机串。

2. 设置默认值

将1中图示的字段后的mock部分填入字串,即可为字段设置默认值。
yapi中使用json-schema mock数据
如上图所示,我们将data的默认值设为this is data; 将code的默认值设为1。在这种情况下,接口的返回值将始终为:

{
  "data": "this is data",
  "code": 1
}

注意,如果默认值与所设字段类型不匹配,相应字段的接口返回值将为null。

比如上例中,code为integer类型,若将默认值设为"this is number"。接口返回值将为:

{
  "data": "this is data",
  "code": null
}

3. 基于mockjs占位符的mock

3.1 什么是占位符

这个概念来源于mockjs, 可以将其简单理解为用于生成特定字串的函数, 具体可参见mockjs官方定义。不过此处并不支持mockjs中所有占位符功能,大概只相当于Mock.Random部分。

3.2 使用占位符

点击数据字段后的mock框,可以看到支持的占位符列表。如下图所示:
yapi中使用json-schema mock数据
我们将data选为@ip, 点击预览可以看到接口返回值如下:

{
  "data": "223.111.85.247",
  "code": 1
}

data将是一个满足ip规则的串。

3.3 常用占位符功能详述

@integer(min?, max?)

返回一个随机的整数。

  • min:可选参数,整数最小值。
  • max:可选参数,整数最大值。

例:

@integer
//--> 1686805249110932
@integer(10,100)
//--> 26

@float( min?, max?, dmin?, dmax? )

返回一个随机浮点数。

  • min:可选,整数部分最小值。
  • max:可选,整数部分最大值。
  • dmin:可选,小数部分最小长度。
  • dmax:可选,小数部分最大长度。

例:

@float
//--> 1924364975802932.5
@float(60, 100, 2, 6)
//--> 68.1258

@string

返回随机字串,有如下几种使用方式:

@string
@string(length)
@string(pool, length)
@string(min, max)
@string(pool, min, max)
  • length: 字串长度
  • min: 字串最短长度
  • max: 字串最大长度
  • pool:表示字符池。如果传入 ‘lower’、‘upper’、‘number’或’symbol’,表示从内置的字符池从选取。对应关系如下:
lower: "abcdefghijklmnopqrstuvwxyz",
upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
number: "0123456789",
symbol: "[email protected]#$%^&*()[]"

例:

@string(6)
//--> kV(qj4
@string('upper',2,6)
//--> NJKU
@string('[email protected]#', 2,6)
//--> #ab!21

@url(protocol?, host?)

随机生成一个 URL。

  • protocol:指定 URL 协议。例如 http。
  • host:指定URL域名和端口号。

例:

@url('https', '123.sogou.com')
//--> https://123.sogou.com/ccdkttr

@ip

随机生成一个IP地址。

@timestamp

返回当前unix时间戳

@datetime(format?)

返回一个随机的日期和时间字符串。

  • format:生成的日期和时间字符串的格式。默认值为yyyy-MM-dd HH:mm:ss。

例:

@datetime()
//--> 1977-11-17 03:50:15
@datetime('y-M-d H:m:s')
//--> 02-4-23 2:49:40

@pick(arr)

从数组中随机选取一个元素,并返回。

例:

@pick(['this', 'is', 'picker', 'test'])
//--> picker

3.4 更多

更多占位符使用可参见下述文档

https://github.com/nuysoft/Mock/wiki/Mock.Random
http://mockjs.com/examples.html#DPD