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

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

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 条回复 时间 点赞
再见理想 回复

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

Nisir 回复

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

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

jinglebell 回复

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

再见理想 回复

嗯嗯,wiremock 也是这样的

jinglebell 回复

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

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

JackyRoc 回复

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

zy 回复

加油,最新版更强大了!

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

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

jierong01 回复

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

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

Test soldier 回复

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

支持开源!

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

再见理想 回复

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

Test soldier 回复

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

taki 回复

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

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

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

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

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

此时想死的心都有了。

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

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

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

CloudHuan 回复

应用场景上面有介绍哦

ting 回复

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

再见理想 回复

飞哥!

再见理想 回复

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

taki 回复

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

taki 回复

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

dubbo 接口有类似的嘛?


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

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

cxf 回复

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

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

isaac 回复

目前只支持 HTTP 的

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