自动化工具 基于 http 协议-接口自动化平台

阿森 · 2018年02月05日 · 最后由 Thirty-Thirty 回复于 2020年02月28日 · 4040 次阅读

前言

做了这么久的自动化测试,从接口到 UI,从 web 端到移动端,渐渐体验到接口测试的重要性,接口测试:简单、核心、重要,用例间依赖性并不强,比 UI 自动化好维护的多,自从使用到 rest-assured 框架,发送请求和断言真的太好使了,渐渐地发现做个接口自动化平台的必要性。

平台功能

1、支持 http 协议接口自动化测试
2、能够在任务管理中集成执行我想要执行的所有接口用例,这些接口用例是在录制管理中加入进去的
3、一些接口参数很难获取的,可以在参数管理中,通过查数据库、调其他接口、java 反射(动态调用 java 方法)等获取。
4、报告即修改的 reportNG 框架的报告。

整体架构

整个平台使用 java 开发,且只支持 http 协议的接口。

应用 工具
服务端 springmvc + mybatis + mysql
前端 vue + jquery 混合
样式 bootstrap
发送请求及断言 rest-assured
报告 reportNG

界面功能展示

1、整个界面功能 分为项目管理 - 接口管理 - 用例管理 - 参数管理 - 任务管理 - 日志管理,先添加项目,在项目基础上添加接口,在接口上面添加用例,然后就是在任务管理里边执行我查询的所有用例,最后生成报告

2、这是单条接口下的用例管理,我们可以单条执行用例,也可以执行该接口下的所有用例,执行完之后可以在执行日志中查看执行信息,是否通过

3、最核心也是最重要的,就是添加用例,添加用例中,预期结果和参数现在都必须是 json 格式,服务端去解析这 json 格式去 ping 凑成链接和断言,并且接口参数需要动态变化的我们不可能只写一个固定值,所以需要在参数管理去维护这些动态,样式格式即:${},
这里边还有有前后置处理,参数中可以使用 ${}引用参数管理中的参数,只要有 ${}格式的,都会先去参数管理中更新下该参数值
还支持调试,调试成功再添加该用例。
并且在断言中,现在只支持解析每个 json 中 key 值,看实际结果中 key 值和预期结果 key 是否相等,因为我们公司接口都是 json 格式。

4、参数管理
参数管理目的就是动态获取接口参数值,保证用例每次执行时都能成功,这里参数的取值方式总共分为:1、直接赋值,2、通过调用接口,3、数据库查询,4、通过 java 反射调用 java 方法 5、执行其他用例 Id

5、最终通过执行任务管理中的任务执行测试用例,生成报告,报告是使用 reportNG 报告样式,修改的。

6、新增账号登陆、注册功能
并且加入自定义过滤器

待优化完善部分

1、任务中可以添加定时任务。
2、发送请求中支持添加头文件或 cookie 部分。
4、图形报告优化。
5、账号体系管理。

共收到 32 条回复 时间 点赞

坐等开源~🤗

这是前后端服务分离了啊

bauul 回复

跟正常开发一样啊,用例数据保存在数据库里边,通过任务执行你查询的用例,你想执行哪些用例可以通过任务控制来执行

坐等 github 地址~

阿森 回复

好吧,你的界面用的 VUE,是用的哪个开源的模板改的吗?你是用 jquery 发的 ajax 请求吧,我看用 VUE 现在都是用 axios 这个

坐等 github 地址~😄

bauul 回复

数据处理和绑定上用的 vue ,样式上不是

阿森 回复

bootstrap 就是这个缺点,上手慢……让人不得不把有些自己想要但是一时半会解决不了的样式问题交给 jquery,所以,我更喜欢 element-ui,跟 vue 一样渐进式

坐等 github 地址~

大哥地址呢 git

阿森 #10 · 2018年02月06日 Author

暂不开源,可以一起讨论

不错,功能齐全,界面也漂亮。

前端输入的测试用例,最终会保存为一个文件吧,这个文件是长什么样子的呢?
能贴一下测试用例最终保存的格式吗?

多谢多谢。

阿森 #13 · 2018年03月08日 Author
白虹李李 回复

测试用例都是放在数据库的,比如接口地址,请求类型,参数,预期结果等,最终通过任务方式执行测试用例,任务其实就是条件型的 sql 语句,把查到的用例通过循环的方式来执行

仅楼主可见
阿森 #16 · 2018年03月09日 Author
石神 回复

当然有了,最近也正在面试中,我微信 15712862196

求 git 地址

问个问题,有两个用例,一个登陆接口,还有一个获取列表接口。执行获取列表接口需要前置处理登陆接口并拿到 Cookie,那登陆接口会执行一次还是两次?

仅楼主可见

看了之后,很想玩玩的冲动

阿森 #20 · 2018年05月03日 Author
fdeferf 回复

在前置处理使用登录用例,而登录用例本身又有后置处理,目的是获取 cookie,把获取的值放在参数管理中,然后获取列表的接口就可以 ${cookie}使用该值了

阿森 #21 · 2018年05月03日 Author
Ami 回复

你是

没个卵用.

阿森 #23 · 2018年05月14日 Author
Jay_ 回复

对你这种人的确是没个卵用

会开源吗

阿森 #25 · 2018年06月06日 Author
yangxiangfu 回复

暂不开源

很想知道参数管理那块儿是怎么做的?怎么把参数替换到 url 中,而且有的接口需要的参数是 json 格式,有的接口需要的参数是直接替换,不知道你这种替换方式怎么实现?另外,你上面说接口参数需要动态变化的我们不可能只写一个固定值,没有太明白你这块儿是怎么实现的?希望解答,谢谢。

阿森 #27 · 2018年08月21日 Author
zhxch 回复

其实并不难,首先前端传给服务端的参数,前置处理,后置处理这些都是 json 格式,服务端解析 json 格式,拿到 key 和 value 值,通过正则判断 value 是否是 ${xx}格式,如果是,那么就做参数替换,如果我的参数管理中也有 xx 名的参数,那么就做参数替换,而参数管理中的值是通过 数据库、正则、调用接口去维护的

你好!能不能把 model 发我看看。491395033@qq.com

你上面说:参数中可以使用 ${}引用参数管理中的参数,只要有 ${}格式的,都会先去参数管理中更新下该参数值。
那么问题:是这么写吗 $ {"username": "John","password": ""},然后代码执行逻辑是先去更新 username 和 password 的值?

阿森 #29 · 2019年02月12日 Author
wuyajun2016 回复

不是,直接就写成 ${username}样式,代码就通过这个名 username 去参数表中获取 value 值,而 value 值本身是通过调接口、调用例、掉数据库之类的获取到的

33楼 已删除

可以部署个体验环境给大家试用下

我目前也在负责做这样一个平台,感觉你做的这个很有借鉴意义。希望你继续扩展优化这个平台,增强其通用性。希望有机会多交流!

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