基于 Django 和 Vue 前后端分离接口自动化平台
写这个平台动力一方面源自于工作,每次发线上版本,回归场景太多,可能覆盖不全,导致一些觉得不会影响到的模块漏了出现问题;一方面之前写接口自动化和 appUi 自动化的框架,虽可稳定运行,但是用例一多,即使用文件管理,我都觉得不容易维护,操作麻烦,且不方便直接定位问题,所以萌生了一个想做一个多人可视化操作维护性强的平台;一方面也当做对自己进步的一个证明,2019年12月20日提交两端第一段代码,之后的 3 个月,白天的业务繁忙,晚上继续节奏感的敲,从数据库设计到页面设计再到页面实现再到后端的逻辑实现再到稳定运行,每一步都不易。
http://aliyun.0cmm.cn:9527 (2020.07.09 服务器压力有点大,目前先关闭,我调整一下,会尽快恢复;2020.07.11 已经恢复访问)
Django 2.1.7
vue 2.9.6
python 3.6.3
vue-element-admin
Element 组件
Iconfont 图标库
1、登录 jwt 鉴权
2、支持项目、接口、用例、环境、邮箱、任务等管理、添加和维护功能
3、支持接口请求数据结果动态获取
4、支持单接口用例调试、支持多接口业务调试
5、支持丰富的动态断言
6、支持定时任务,支持 html 邮件报告和平台报告生成、每个失败用例均可以快速定位和调试
7、支持用例执行不正确时候对应模块下分布式各个服务器微服务日志获取
8、支持不同项目接口独立环境地址运行
9、支持接口批量导入
20200617 新增步骤中复制功能,可以用于一个用例中同一个接口步骤快速填写不同的请求参数
20200711 新增任务计划企业微信群机器人功能,可以通知多个企业微信群
20200720 1、用例新增 json 请求(这个功能只支持数据请求为 json),支持参数化请求,字段填写如{"user":"$user$1$0$0"}(user 是想要查找的字段;1 是接口或者用例的 id;0 是下标;0 是接口类型 1 是用例类型 2 是公共用例类型;);2、断言新增 sql 校验,sql 填写了,就按照 sql 进行断言。3、新增数据库管理 4、接口新增必填项和描述,必填项会在添加用例步骤体现出来
项目>模块>(接口=用例)
首页记录了项目、接口、用例、任务计划的有效总数,点击均可以跳转到对应操作页面
操作小助手帮助操作者更好的了解使用流程
项目管理页面实现项目和模块的增删改查功能,项目下包含模块(支持添加和查询),示意图如下
接口管理主要实现了接口的增删改查。
1、接口关联项目和模块
2、请求方式目前添加了主流的两种,post 和 get
3、数据传输方式为 json 格式或者 data
4、可以添加多个 header 和 body,每个 header 字段或者 data 字段都有对应的类型可供选择,用于请求接口使用正确的值的类型。
5、接口地址,如果数据库已经保存了这个接口,则会提示 “已经添加过该接口”,不会重复添加
6、支持签名,签名的规则需要后端写死
7、除了 header 和 body 以及描述可以不用填,其余的都得填写
1、一次仅支持一个文件的导入
2、严格按照表格模块的格式进行填写,表格第二行是模板填写方式,不用删除,这行不会执行,会从第三行开始执行导入的顺序
3、如果表格中的接口已经存在在平台了,则会跳过,不会录入到数据库,避免接口重复添加
4、表格 header 和 body 以及描述可以不用填写,若填写 header 和 body,请严格按照表格第二行进行操作
用例列表管理包含了基本的增删改查,以及运行功能
用例列表按照用例类型分有 4 个:全部用例、公共前置用例、单接口用例、业务用例
这个用例类型比较特殊,执行计划的时候,一天只运行只运行一次(手动运行可以运行多次),且会优先执行,比如登录用例,结果中带 token,这个运行一次后,后面用例需要引用这个 token 值,就不用再次执行一遍用例。
这个用例类型,用例有且只有一个接口,无前置用例,比如 app 中的搜索,登录或者不登录都可以用
这个用例包含了多个接口组成一个业务,允许有前置用例
点击运行,出来选择环境的弹框,项目 + 环境
环境可以选择已经配置好的环境,或者自己填写一个环境运行,填写环境格式支持 http 和 https 如:http://192.168.1.1:8080
点击调试用例则有对应的运行结果弹框,这个用例有多少个接口运行了,则就有多少个接口的结果在运行弹框中
添加用例是整个项目中的核心,功能最多,最灵活,后端逻辑也最复杂
这个当时做的时候就写了 3 个版本 (┬_┬),父子组件之间的数据交换以及页面交互。
1、单接口 用例类型:用例步骤中只有一个接口,步骤中无前置用例
2、多接口业务类型:用例步骤中,包含了多个接口,也允许每个步骤中有前置条件
3、公共前置用例类型:用例步骤中,可以有多个接口,如果需要这个类型的用例的值,一天只会被运行一次(比如一个计划计划中,登录运行一次就可以被其他用例都引用到,不需要重复执行)
建立一个用例前,当然先选择一个接口,添加一个接口就会多一个步骤,步骤添加后会是折叠效果,一个接口支持多次添加
一个步骤中包含有 5 个组成部分
1、接口基本信息
2、前置条件,这里只支持添加单接口类型的用例,支持添加多个
3、接口请求信息,包含了两个部分,header 和 body(如果新增接口的时候已经填写了字段,则字段信息会带过来)
header 或者 body 中的每一个字段都会有这几个信息:
①字段名字:如果接口新增中填写了字段名字,选择完一个接口后则会直接同步
②字段值:动态取某个接口运行的结果或者某个用例运行的结果写法 $token($ 为后端判断的特殊标识符),如 果不是动态的,则无需要加 $
③字段值的类型:如果接口新增中填写了字段类型,则会直接同步
类型说明: str,表示这个值是 string 类型
int,表示这个值是整型
boolean,表示这个值是布尔类型,字段值则填写 true 或者 false
float,表示这个值是浮点型
json,表示这个值是 json 串,字段值写法如{"test":"test"},当然如果 json 串里面有动态值则需要这样写{"test":"$test"},也是需要 $ 作为特殊表示,实际场景中还有更加复杂的动态变量,一个 key 中的 value 值可能需要取多个接口中产生的结果值,于是就有了{"test":"$test$1$1"},第一个是要取的值,第二个表示从哪个接口 id 或者用例 id 中取,第 3 个表示取的下标,来应对复杂的动态取值。
list,表示字段值类型是个数组
获取当前时间,字段值不需要填写
签名,这个比较特殊,获取的是需要签名的接口请求,字段值不需要填写
null,字段值不需要填写
空字符串,字段值不需要填写,表示 ‘’
④是否取其他接口或者用例的值勾选框:勾选了,则表示这是一个动态的字段值
⑤选择哪个接口或者哪个用例:
接口 id:步骤中基本信息会有接口 id,可以取到那个步骤接口运行后的值
用例 id:非公共前置用例,取某个用例运行后的值,这里一般用于取前置用例的值
公共前置用例 id:取只运行一次的值,一般可以用于取登录后返回的 token
⑥ID:写接口 ID 或者用例 ID 或者公共前置用例 id
⑦下标:所需要的值可能在那个接口运行结果中存在多个,所以需要用下标取值,只有一个值,则下标为 0
4、断言
断言中的每一个字段都会有这几个信息:
①实际结果字段,需要断言的结果字段
②实际结果字段下标,该接口运行结果中可能会产生多个这个结果字段,所以需要取下标,只有一个值,则下标为 0
③比较符,实际结果和预期结果做比较
=,实际结果=预期结果
>,实际结果>预期结果
<,实际结果<预期结果
!=,实际结果!=预期结果
in,实际结果 in 预期结果
④预期结果值,填写一个预期结果
⑤预期结果值类型,填写预期结果值类型
5、步骤的操作
1、删除图标,将这个步骤删除
2、上移图标,将这个步骤上移
3、下移,将这个步骤进行下移
考虑到一个用例中,存在多个接口,可能接口所属项目不一样,所以可以添加多个运行环境
这里可以填写完步骤信息以后,就调试一波,可以用来写断言
任务计划列表管理包含了基本的增删改查,以及运行功能
运行是异步进行的,运行结束后,会生成报告,如果一个计划在运行
运行包含了 3 中状态
未执行,一个计划刚创建的时候,会是这种状态
执行中,只要有一个计划正在执行中的,点击其他计划会提示有计划正在执行中,防止执行接口时候,数据错乱
执行结束,该计划执行结束
默认是关闭状态,关闭则不会定时执行这个计划,开启则会在选择的时间段内执行这个计划,启用后,一天只执行一次。
需要在配置 “邮箱管理” 添加发件邮箱和收件邮箱,
1、发件邮箱用于发送邮件,不配置,则无法发送邮件,
2、收件邮箱用于定时任务结束后会产生报告,用于接收邮箱
添加用例执行所需要的环境,选择环境需要在配置里 “环境管理” 添加环境,用于定时任务执行,当然也支持其他地址的填写
需要在配置 “微服务日志” 添加好微服务的信息,当执行的某个用例异常产生错误的时候,添加这个微服务日志用于开发快速定位问题
选择用例有两钟方式,一种是按项目选择,选择项目,则会运行一整个项目的有效的用例;一个是选择所有的用例,手动添加想要执行的用例
产生方式:
1、定时任务执行计划
定时任务执行结束,会产生两种报告,一种是纯 html 写,用于发送邮件使用;另一种则在平台内,可视化,更详细,方便定位
2、手动跑任务计划
只会产生平台测试报告
平台测试报告如下:
邮箱报告如下: