自动化工具 自制的开源自动化 mock 工具

天琴圣域 · 2017年04月06日 · 最后由 infy001 回复于 2017年07月18日 · 2399 次阅读

mock 开源工具 (SSM+Nginx+shell)

开发背景

工作中经常出现前端开发和后端开发并行的情况,为了帮助前端开发早些进行调试,我们测试有时会协助提供接口的 mock 服务。

那么接下来就是 mock 框架的选择,之前选用的是 moco,但是 moco 的缺点是每个 mock 服务都需要新起一个服务,也就占用了一个端口,一次性使用还好,如果一次需要制作很多,就会存在不少问题(例如 mock 机器本身由于启动过多 moco 带来的性能问题、数据维护不便等)。

于是我就做了这个。

使用说明

demo(由于使用的阿里云主机且没有备案,可能会存在问题,建议大家使用自己的服务器):http://139.224.165.210:8080/mock-open/page/mock,139.224.165.210 就可以查看效果了~创建完把域名指向

github:https://github.com/RookieTester/mock-open

新增 mock 在 web 界面进行操作:

图片.png
填写完信息后,点击 URL 填写框旁边的 “确认添加” 按钮即可完成。

成功后会弹窗提示,失败也会有相应提示。

成功例子:

图片.png
失败例子:
(何为重复在注意事项里会提到)
图片.png

也支持状态码的定制,可以设计该 mock 接口只返回指定的状态码:
图片.png
成功添加后,可以看到状态码确实是 400
图片.png

页面的下方是搜索框,用的是 jqgrid 表格框架,支持按 URL 和名称查询两种查询方式:
图片.png

配置方法

环境要求

Linux 主机一台(Windows 版正在开发,时间嘛就不提了),需要安装 Nginx,MySQL 和 tomcat。MySQL 和 tomcat 可以安装在 Windows。

服务端配置方法:

yum/apt-get install nginx #安装Nginx
cd /etc/nginx/conf.d #使用上述方式安装Nginx的话,这里就是Nginx server模块的配置文件目录
###将下面的内容粘贴进去
###begin
vi default.conf
#
# The default server
#


server {
    listen       80;
    server_name  app.api.com;
    root         /usr/share/nginx/html;
    index        index.html;
    charset      utf-8;
    include /etc/nginx/conf.d/mock/http/*.conf;
}
###end
:wq  #保存并退出

mdkir mock
cd mock
mkdir http
mkdir https
mkdir shell
cd shell
rz auto_domain.sh #rz是上传文件,也可以用别的方式上传,只要是这个位置就行。shell,用于添加虚拟域名
rz auto_mock.sh #shell,用于添加location
rz change_json.sh #shell,用于某个mock更新Json数据
service nginx reload #因为使用上述方法安装Nginx后会自动启动服务,这里只需要reload一下服务即可

上面用到的 shell 可以在源代码下找到,路径为 src/main/resouces/shell。

MySQL 配置

新建一个数据库,名为 server,当然你也可以改名字。然后执行 src/main/resources/sql/schema.sql 里的语句即可创建好需要的表结构。最后修改源代码的数据库连接配置文件 jdbc.properties。

Linux 连接设置

web 服务需要连接 Nginx 所在的 Linux 服务器,配置文件在 src/main/resources/mock.properties

客户端配置

把源代码中的配置文件修改好以后,使用 IDE(推荐 eclipse 或 idea)将服务部署在 tomcat 即可。
或者编译完源代码,自己放在 tomcat 的服务目录(webapps)下启动。
最后通过http://ip:8080/page/mockweb 页面。访问

注意事项

设计与编码

前端展示使用 bootstrap,后端是 SSM(SpringMVC+Spring+mybatis)。代码不复杂,前端页面调用 ajax 向后端发送请求,后端会对 mock 服务端(一台 Linux 机器)建立连接并发送命令,该命令会调用 Linux 主机上的 shell 脚本,对 Nginx 的配置文件进行操作,成功后重启 Nginx,最后将记录写入数据库。

架构图:

架构.png

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 12 条回复 时间 点赞
1楼 已删除

打包成 docker image 可能会更方便😂

Fresh 回复

赞同,正在学 docker。。。老实说我自己看这教程都嫌麻烦,所以放了一个 demo 让大家先试用。。。

没看懂为什么需要这么庞大的架构来做一个 mock。

是不是直接写个小程序放在服务器上也能胜任?比如服务端就根据你请求的 url 不同直接返回不同的预先写好的结果。

你是想让测试人员通过你这个网站来自定义他想要的 url 的不同返回值吗……直接让他改 mock 的代码或者单独的数据文件不更方便吗。比如让测试人员在 git 上上传包含了 url 和预期返回值的数据文件,你的工具上再解析这个东西并存入数据库。这样前端就不用做了,数据库其实也不用做,直接读文件就好。反正只是个 mock。

反正我作为测试人员的话,宁可自己写小程序来实现...

ting 回复

周末起得挺早啊。。。这个也不算很大,其实本质就是改数据文件,我就是把 Nginx 作为静态服务器用了。可能前端和 MySQL 这块显得有些庞大了,主要是为了管理大量的 mock 方便些(配置起来是挺麻烦的我承认😁 ),可能我对 Java 的 web 框架熟悉些,就直接做了。你说的方法让我恍然大悟,真的是事情往往可以用很简单的方法实现但当事人却想不到。
一开始设想也是好的,做起来发现坑挺多,这就是自己造轮子吧,啥都想自己做下,做着做着还是发现之前别人的设计不比你差。

ting 回复

其实还有个很关键的点,这个工具给客户端开发用的话,由于 APP 打包发包等等规则的限制,需要测试包和线上包的代码尽量保持一致,也就是我这个 mock 服务的 URL 要和正式 API 的 URL 完全一致,这个我目前还真只想到了 Nginx 这种处理方案,自己做在服务里的话地址里难免会有端口号神马的。。。

😁先点赞。不过目前前端比较流行并喜欢的服务 mock 框架,是阿里开源的 RAP

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

ting 回复

直接本地启个 moco 或者做个 springmvc 方法中转可以完全解决你说的所有问题😁 @843633513 以前是如何实现的,你也可以和大家讲一讲啊!

其实对于测试同学来说难的不是使用各种工具、方法,而是怎么形成自己的东西,说白了都是殊途同归,做到最后可能都会发现其实和最初的没啥区别,但是要形成自己的东西我认为最好的就是实践,在实践中可以掌握各种各样的技能,也能了解到自己的欠缺得以完善,其实如何实现都无所谓,重要的是实践的过程,你得到了什么?

我鼓励所有测试同学在使用各种工具的同时,如果能自己动手扩展的都动手,不管是根据现有工具二次开发、重新定制也好,照样重做一套也罢,对于个人来说都是一个很好的成长过程😁

年轻人多搞搞事情还是好的,有助于以后的发展😁 不过对于老年人的我来说,站在别人或都你们肩上就好了😀

CC 回复

开眼了,这个感觉都包含了接口测试的大多数功能了😁

49875183 回复

回错人了,我并没有提问。我只是跟楼主说不理解他为什么要费九牛二虎之力解决一个不费力就能搞定的问题。

版主你好,请问这个 nginx 是你自己封装了下么?

835721919 回复

不算吧,我就只是改了配置文件,具体改动上面也提到了。我不是版主啊😂

如果要实现复杂逻辑有接口可以开发或者执行简单脚本吗?

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