1. 概述
1.1 插件名称#
- Mock插件
1.2 适用场景#
- 为请求指定响应状态码和响应体方便进行测试。
1.3 插件功能#
- 设置请求的响应状态码和响应体。
- 支持配置
${}占位符自动生成数据。 - 注意: mock 插件为了支持更加灵活的数据生成方式,支持用户使用 SpEL 表达式生mock数据。使用SpEL表达式可能会导致执行恶意脚本或应用破坏性程序的风险。我们建议您在使用时格外小心,尽可能在安全的环境中使用,例如内网环境,并遵循安全最佳实践。
1.4 插件代码#
- 核心模块
shenyu-plugin-mock - 核心类
org.apache.shenyu.plugin.mock.MockPlugin
1.5 添加自哪个 shenyu 版本#
- 2.5.0
2. 如何使用插件
2.1 导入 pom#
- 在网关的
pom.xml文件中添加插件 maven 配置。
<dependency> <groupId>org.apache.shenyu</groupId> <artifactId>shenyu-spring-boot-starter-plugin-mock</artifactId> <version>${project.version}</version></dependency>2.2 启用插件#
- 在
shenyu-admin--> 基础配置 --> 插件管理 -->mock设置为开启。

2.3 配置插件#
- 选择器和规则设置,请参考:选择器和规则管理。
- shenyu-admin mock 插件配置,支持配置 httpStatusCode 和 responseContent:
- httpStatusCode:配置请求的响应码。
- responseContent:配置响应体内容,支持配置
${}占位符生成随机数据 。

2.4 ${} 支持的语法#
${int|min-max}
- 说明: 生成
min到max的随机整数,包含min和max。 - 示例:
${int|10-20}
${double|min-max|format}
- 说明: 生成
min到max的随机浮点数 ,包含min和max,并按照format进行格式化。 - 示例:
${double|10-20},${double|10-20.5|%.2f}
${email}
- 说明: 生成随机的邮箱地址。
${phone}
- 说明: 生成随机的13位手机号码。
${zh|min-max}
- 说明: 生成长度为
min到max(包含min和max)的随机中文字符串。 - 示例:
${zh|10-20}
${en|min-max}
- 说明: 生成长度为
min到max(包含min和max)的随机英文字符串。 - 示例:
${en|10-20}
${bool}
- 说明: 生成随机的
boolean类型的值 即true或false。
${list|[arg1,arg2...]}
- 说明: 随机返回列表中的任意一个值
- 示例:
${list|[gril,boy]}会返回 girl 或 boy 中任意一个。
${current|format}
- 说明: 返回当前时间并使用
format格式化,format可缺省,默认是YYYY-MM-dd HH:mm:ss。 - 示例:
${current},${current|YYYY-MM-dd}
${array|item|length}
- 说明: 按照
item格式定义生成长度为length的数组,item中可以嵌套使用上述的所有数据生成规则,结果会自动添加[]。 - 示例:
${array|{"name":"test"}|3}会生成[{"name":"test"},{"name":"test"},{"name":"test"}],${array|{"age":${int|18-65}}|3}
${expression|expression}
目前支持spel表达式并内置了一些函数和参数,完全可替换旧的${}语法
${expression|#int(min,max)}- 说明: 生成
min到max的随机整数,包含min和max。
- 示例:
${expression|#int(1,2)}
- 说明: 生成
${expression|#double(min,max)}- 说明: 生成
min到max的随机浮点数 ,包含min和max,并按照format进行格式化。 - 示例:
${expression|#double(10.5,12.0)},${expression|#double(10.5,12.0,'¥%.2f')}
- 说明: 生成
${expression|#email()}- 说明: 生成随机的邮箱地址。
${expression|#phone()}- 说明: 生成随机的13位手机号码。
${expression|zh(min,max)}- 说明: 生成长度为
min到max(包含min和max)的随机中文字符串。 - 示例:
${expression|#zh(1,10)}
- 说明: 生成长度为
${expression|en(min,max)}- 说明: 生成长度为
min到max(包含min和max)的随机英文字符串。 - 示例:
${expression|#en(1,10)}
- 说明: 生成长度为
${expression|#bool()}- 说明: 生成随机的
boolean类型的值 即true或false。
- 说明: 生成随机的
${expression|#oneOf(arg1,arg2...)}- 说明: 随机返回列表中的任意一个值,不限制类型
- 示例:
${expression|#oneOf('shenyu','number',1)}会返回 'shneyu' 或 'number' 或者数值1。
${expression|current()}- 说明: 返回当前时间并使用
format格式化,format可缺省,默认是YYYY-MM-dd HH:mm:ss。 - 示例:
${expression|#current()},${expression|#current('YYYY-MM-dd')}
- 说明: 返回当前时间并使用
${expression|#array(item,length)}说明: 按照
item格式定义生成长度为length的数组。示例:
expression|#array('shenyu',3)会生成["shenyu","shenyu","shenyu"].也可嵌套使用
${expression|#array(#bool(),2)}或者${expression|#array(#array('shenyu',2),2)}
${expression|#req}- 说明:内置请求参数,可根据请求内容生成响应数据
- 示例:
${expression|#req.method}、${expression|#req.queries['query_name']}、${req.queries.query_name}、${expression|#req.uri}。当请求体为json时,可使用jsonPath,比如请求体为{"name":"shenyu"},${expression|#req.json.name}将返回"shenyu"
${expression|spel}- 说明:直接使用Spel表达式生成数据
- 示例:
${expression|T(java.time.LocalDate).now()}、${expression|1==1}
建议使用新的
${}语法,旧的语法功能可能择期被移除。功能可替换查看表:
old new ${int|min-max} ${expression|#int(min,max)} ${double|min-max|format} ${expression|#double(min,max)} ${email} ${expression|#email()} ${phone} ${expression|#phone()} ${zh|min-max} ${expression|#zh(min,max)} ${en|min-max} ${expression|#en(min,max)} ${list|[arg1,arg2...]} ${expression|#oneOf(arg1,agr2...)} ${current|format} ${expression|#current(format)} ${bool} ${expression|#bool()} ${array|item|length} ${expression#array(item,length)}
注意:不需要使用 "" 包裹 ${} ,mock插件会根据 generator的定义增加前缀和后缀。