自动化工具 mock 平台----zmock 第一版介绍

再见理想 · 2017年06月21日 · 最后由 再见理想 回复于 2019年04月23日 · 2695 次阅读

zmock 功能

模拟出一个不存在的 http 接口,根据请求参数的不同返回对应的数据。

zmock 应用场景

  1. 在接口文档写好后,就可以 mock 出一个接口,以便于客户端开发,且测试人员也可以开始写测试用例。mock 出来的接口也相当于一种契约,服务端与客户端都必须遵守这个 mock 出来的契约。
  2. 当系统中有第三方接口,在做性能测试时,可以 mock 第三方接口,作为性能测试的档板。
  3. 其它。

zmock 介绍

  1. 开发语言及框架:java,spring,easyui
  2. web 容器:tomcat
  3. 部署方式:
    • 将打包好的 zmock.war 更名为 ROOT.war
    • 将 ROOT.war 放在 tomcat 的 webapps 目录下面
    • 启动 tomcat
  4. 设置

zmock 平台使用说明

接口文档:
请求链接:/api/info/v1
请求方法:post
请求参数示例:{"name":"zhang","age":30}
请求参数说明:

参数名 参数类型 是否必需 示例值
name string zhang
age int 30

响应说明:

  1. 当 name 的值为空或者 age 的值小于等于 0 时,响应: {"retCode":"300","retMsg":"参数不正确"}
  2. 当 name 的值为 zhan 时,响应: {"retCode":"301","retMsg":"数据不存在"}
  3. 当 name 值为 zhang 且 age 的值为 18 时,响应: {"retCode":"301","retMsg":"数据不存在"}
  4. 其它情况下,响应: {"retCode":"200","retMsg":"ok.","data":{}}

以上是一份简单的接口文档,公司不同,文档的要求不同,但我相信大家都应该能看懂这份文档,现在,我们根据这份文档来 mock 一个 http 接口出来:

  1. 点击左上角的 + 号:
  2. 确定后,在菜单中选择或输入测试 DEMO,在 mock 请求 URL 中填写:
  3. mock 请求方法选择 POST:
  4. 在 mock 请求参数模板中:
  5. 在 mock 规则定义中点击新增:
  6. 再增加一条规则:
  7. 最后一条规则:
  8. 保存后,mock 就完成了

mock 完成后,我们来测试一下这个 http 接口:



zmock 的特点

  1. 请求参数模板的定义。根据请求参数模板,来判断请求参数是否正确。 mock 请求参数模板说明:
    • .* 表示请求参数为任意字符串,用于 POST BODY
    • 如 username=&password=表示 POST 表单提交或 GET 请求
    • 如{"username":"","password":""}表示 POST BODY 为 JSON 串
  2. mock 规则利用表达示来定义。比如/name,/age,这是 json 路径,具体的请参考:https://github.com/zhangfei19841004/zson 表达示所支持的比较符有: == != > >= < <= in contains 表达示方便扩展,如有需要,自行扩展即可。 支持的连接符有:and or (),其中 () 的优先级最高,支持括号里套括号。
  3. 采用文件异步保存数据的方式,且数据都放在内存里,保证接口的响应速度。

zmock 地址

共收到 33 条回复 时间 点赞
zy 回复

加油,最新版更强大了!

最近正好想写个 mock 平台,多谢楼主

JackyRoc 回复

zmock 里用到了 zson,可以直接用路径来获取所需要的值,不过,你说的这个功能,目前不支持!可以考虑扩展。

感谢开源,请问关于 response 的模拟,这种该如何实现:POST 请求是 json 报文,其中有一个字段是 ID,response 需要获取这个 ID 作为响应 json 的一部分。

jinglebell 回复

没用过 wirremock 哦,如果可以,请支持试用一下 ZMOCK😀

再见理想 回复

嗯嗯,wiremock 也是这样的

jinglebell 回复

因为要适应大多数的人,要达到部署即可用,所以就没有用到数据库,免得还要装个数据库。数据是以 JSON 格式存储在文件中在!

我正纳闷 mock 数据存储怎么玩,然后就看到回复没有用到数据库

Nisir 回复

并不影响功能的使用,主要是因为没用到数据库,导致很多判断哦!再说了,if else 并不是不可用啊。。。。如果有优化的地方,可以一起讨论哦😀

看了眼 git,if else 嵌套感觉多了点。。

isaac 回复

目前只支持 HTTP 的

cxf 回复

多谢支持!还有一点,如果是高版本 JDK 编译,低版本运行,也同样会报这个错,所以,最好是遵循上面的 JDK 与 TOMCAT 版本。
如再有问题,可以联系我:408129370


亲,在哪能看日志呀,我看了下我的 mock 规则,没看出哪不对,是不是因为没有安装你的 zjson.jar 的原因呢

找到原因了,我的 workspace 可能没有手动去创建。。。!~谢谢楼主开源

dubbo 接口有类似的嘛?

taki 回复

是的,就是模拟出一个 B 的接口。

再见理想 回复

也就是说要把应用 A 调用外部的接口改成 zmock 的是吧?

taki 回复

可以直接生成一个 B 的 HTTP 接口。调用还是通过 HTTP 的形式。

再见理想 回复

mock 应该是 服务度 A 依赖于服务端 B,那么楼主的平台模拟 B 对吧,A 的调用要指向 B,如何指向?

再见理想 回复

飞哥!

ting 回复

这就是没有形成良好的契约 所有的都跟着开发走 看他们的心情来定参数 这是不科学的!

CloudHuan 回复

应用场景上面有介绍哦

不知道楼主的 mock 平台怎么解决数据维护问题。
假如我是用户,辛辛苦苦加了几百个接口上去,开发说所有接口都要改几个参数。

此时想死的心都有了。

更想死的事情是过几天之后说弄错了那些参数要改回去。

此时我就想砸了这个图形界面和没有完善的数据版本控制的平台。

以上是我使用类似平台的真实工作体验(不过我们加的不是接口是 case)

这个挺好 但是想知道可以用在哪里 自动化的 mock 是为了模拟复杂的调用 接口的话直接写死一个传递参数不是一样的效果么🔞

taki 回复

可以在上面图中有介绍,在平台中填写 URL,就可以通过 HTTP 外调了。。。

服务端的外调如何调用到平台呢?

—— 来自 TesterHome 官方 安卓客户端

Test soldier 回复

应该不会,可以试用的感受一下。

再见理想 回复

看你介绍的规则,感觉可以是按照参数 mock,我的意思是我把这个接口按一定的传参 mock 了,那别人调这个接口会影响正常使用么

首先惭愧,一直没有太 active 去 follow 这个项目。我太懒了。
其次,开源的精神是值得尊重的,大家参与才能提高自己的能力不是吗?
最后希望能继续有新盆友加入到这个项目中,集思广益,多多使用,提 issue。

支持开源!

Test soldier 回复

MOCK 整个接口,有规则定义,根据规则来响应不同的值。

这个是 mock 整个接口,还是针对不同传参 mock 的

jierong01 回复

这是 mock 不是来做接口自动化的

想请问一下,这个是用来自动化接口测试的吗?是可以百分百保证测试质量?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册