PowerMock是一个Mock Server的实现,它同时支持HTTP与gRPC协议接口的Mock,并提供了灵活的插件功能。 这个工具面向于前后端、测试等对有接口Mock需求的开发人员,也可以作为一个通用的Mock服务,部署在网关架构或API管理平台中,实现降级、接口Mock等功能。
功能
作为一个Mock Server,PowerMock具有以下的核心功能:
- 支持 HTTP协议 与 gRPC协议 接口的Mock。
- 支持配置 Javascript 等脚本语言来动态生成响应。
- 支持对一个接口配置多种响应,并按照条件进行区分。
- 匹配条件支持多种运算符(AND/OR/>/</=等)。
- 支持返回静态数据以及 特定领域的随机数据。
- 支持 插件 功能,可以通过编写插件实现其他匹配或Mock引擎。
- 同时提供HTTP与gRPC接口,可以动态对MockAPI进行 增删改查 。
- 开箱即用的Redis存储,并支持自由拓展其他存储引擎,比如MySQL、etcd。
- 同时支持 windows / darwin / linux 的 32 位 与 64 位。
- 语言无关,任何使用HTTP协议或gRPC协议的项目均可以使用本工具。
示例
一、较为高级的用法
以下面这份配置为示例:
uniqueKey: "advanced_example"
path: "/examples.greeter.api.Greeter/Hello"
method: "POST"
cases:
- condition:
simple:
items:
- operandX: "$request.header.uid"
operator: "<="
operandY: "1000"
response:
simple:
header:
x-unit-id: "3"
x-unit-region: "sh"
trailer:
x-api-version: "1.3.2"
body: |
{"timestamp": "1111", "message": "This message will only be returned when uid <= 1000", "amount": "{
{ $mock.price }}"}
- condition:
simple:
items:
- operandX: "$request.header.uid"
operator: ">"
operandY: "1000"
response:
script:
lang: "javascript"
content: |
(function(){
function random(min, max){
return parseInt(Math.random()*(max-min+1)+min,10);
}
return {
code: 0,
header: {
"x-unit-id": (request.header["uid"] % 5).toString(),
"x-unit-region": "bj",
},
trailer: {
"x-api-version": "1.3.2",
},
body: {
timestamp: Math.ceil(new Date().getTime() / 1000),
message: "this message is generated by javascript, your uid is: " + request.header["uid"],
amount: r