接口测试平台 requestnew

源码和文章

服务与源码地址

阿里云服务演示地址:http://47.102.110.163:8090
想要尝试的可以发我登录名,一个项目名和一个模块名,我为大家创建项目空间
源码地址:https://github.com/happyletme/requestnew
讨论群:655981739

历史文章演变

第一篇:https://testerhome.com/topics/13269
第二篇:https://testerhome.com/topics/14801
第三篇:https://testerhome.com/topics/15352
第四篇:https://testerhome.com/topics/15657
其余篇:https://tech.kujiale.com/zi-yan-jie-kou-ce-shi-ping-tai/

版本更替

最新版本 V2.2.0 更新

1.新增 redis 操作
2.新增接口测试过程中自定义函数方法的定义和引入
3.对于不同项目组的数据隔离
4.改写单测执行的报告和首页数据展示报告的样式
5.admin 后台对于用户,项目,模块功能的开发
6.在生成的 unittest 插桩,监控脚本执行进度,执行任务实时进度
7.断言开发小工具可以直接解析 jsonpath,支持 4 种方式断言:字典、jsonpath、返回状态码、数据库 sql 查询出的变量解析
8.新增 put 和 delete 方法

往期版本更新

V2.1.3 集成新版的单次报告,修改爬虫部分,将用例和步骤备注信息和新版本报告绑定
V2.1.2 修改项目名和用例对不上的问题,修改 html 报告颜色部分,断言错误 fail 采用红色,其余错误 error 采用黄色
V2.1.1 对于用例名、步骤名、任务名正则限制,只允许 0-9a-zA-Z_等字符,修改失败重跑限制
V2.1.0 修复生成脚本时不能同时选中 2 个页面的脚本,优化生成脚本文件.
V1.8 引入 mongo 对于返回结果值存储,实现接口依赖功能。
V1.7 优化断言模块,采用 json 方法多层级遍历,增加断言比较方法
V 1.6 修复环境配置取消必须绑定端口号,接口测试取消必须连接数据库,优化定时模块
V 1.5 实现可选择邮箱发送
V 1.4 实现日志模块和报告数据分析模块
V 1.3 引入任务概念,实现定时模块 (双环境) 的控制
V 1.2 定义生成脚本规则,实现自动生成脚本,动态引入 sql,增加 unittest 的失败重跑机制
V 1.1 实现配置化管理,环境配置,数据库配置,邮箱配置
V 1.0 实现用例步骤维护,实现 3 种 http 调用,引入 django 和 unittest

部署篇

依赖库安装:

pip install -r requirements.txt

源码库修改

uniitest 源码:
群文件中有 case.py 和 loader.py 文件替换即可
1.新增 unittest 的 case.py 文件中 TestCase 类加入一个方法
2.更改 unittest 的 loader.py 文件中 TestLoader 类一个方法 discover
Django 源码:
site-packages\django\contrib\admin 下
1.去除保存后提示成功换成自定义提示,options.py 里的 response_change 方法和 response_add 注释 self.message_user(request, msg, messages.SUCCESS)
2.修改 options.py 里的 save_related 方法,捕获新增关系表的异常

try:
    form.save_m2m()
except:
    pass

服务部署

支持 linux 和 window 部署
linux 和 windows 都支持
1.安装 python3.6 和对应的 python 库
2.把源代码放到 linux 下(我创建了 pj 目录,项目放在/home/pj 下)
3.选择一个 mysql 数据库新建一个 request 数据库作为测试库,在 django 的 setting.py 文件的 86 行配置数据库的信息 (ip,端口,数据库名称,用户名,密码)
4.选择一个 mongo 数据库作为测试库,在 django 的 setting.py 文件的 103 行配置数据库的信息 (ip,端口,集合,一张表)
5.进入到项目根目录,数据库迁移:python manage.py makemigrations 在 request 应用下的 migrations 目录下创建了一个 0001_initial.py 文件,执行 python manage.py migrate,执行完成库表生成
6.创建第一个用户 python manage.py createsuperuser
7.在 pj 目录下创建 logs 目录,下面创建 request.log 文件存放项目日志文件
8.在 django 的 setting.py 文件的 28 行,添加自己 linux 的 ip(我的是 ALLOWED_HOSTS = ['192.168.100.158'])
9.把启动 shell 和关闭 shell 放在根目录下(requestnew),sh start.sh,项目就启动了;项目关闭则执行 sh shutdown.sh
10.如果目录结构想要有所调整或者启动端口(默认 8000)有所调整,需要修改启动和关闭文件
11.其他机子能访问到(配置的 ip:8000)就成功了。

操作篇

管理员

1.用超级管理员登录后台

2.添加用户输入用户名和密码

3.给新增的用户授权
第一个框可以采用默认方式这样会保证用户登录前台,下方是允许用户操作的库表

4.新建项目和模块
唯一需要注意的是新增的测试人员,是把模块和人绑定其他,前台的数据展示都是跟着绑定后的人来动的

非管理员

1.添加接口
填写接口名,支持输入英文字符和,关联模块和项目,填写对应的 API,版本以及接口描述信息。还可以通过设置状态去管理这条接口是否被需要。

2.添加用例
填写用例名,支持输入英文字符和
,关联接口。方式已经实现 5 种,get,postform 表单,postbody 传 json 体,put,delete,填写相应的 header 和传参。右侧提供增行和删行。
下面两个按钮,一个是断言开关,一个是接口依赖开关,关掉是不使用的意思。填写用例优先级和用例描述。SQL 和断言在其他目录介绍。

3.断言
断言配置提供了 4 种方式,状态码,正则加字典的方式,jsonpath,数据库字段值的校验。比对方式也提供了多种选择,有等于、不等于、包含、不
包含在列表中等等。

一.状态码校验,填写关键字 status_code,系统就会默认选择状态码校验
二.数据库字段值的校验,这个要配合 sql 一起实现。sql 中配置了查询的 sql,将变量值获取,选取中间态执行,然后配置断言 (itemtype)({amount})
方式校验结果
(如果数据库存有” 的字符串,系统自动替换成 ‘,所以实际结果直接写单引号就可以了;如果数据库存有,的字符串,系统自动替换成 +,所以实际结果直接写 + 就可以了)
(如果断言的结果涵盖布尔值的时候,与其对应的常量需要填写 True 或者 False)

下面两种方式用例子来介绍,下图展示了一个 json 的数据,我要断言到 result 第一个对象的 couponId 值。['d']['result'][0]['couponId'],遇到字典用 [''],
一定要用单引号,遇到数组用 []。这样就能一直遍历下去。

jsonpath 方法,采用'.'开头,也是刚才那个字段.d.result[0].couponId,遇到字典用.遇到数组用 [],这里可以用 json 格式化小工具去获取 path。

4.SQL
sql 与用例绑定,一个用例可以添加多个 sql。sql 可以选择是否为查询 sql,勾选了查询 sql 需要填写变量,变量用','隔开,selcet 语句选取查询的字段与
变量 1:1 映射。查询的变量结果可以在断言和参数以及 header 上替换,格式选取为 ${变量名}。非查询语句只需填写 sql。sql 选择只需的 3 种时间状态,
前置:初始化请求前,中间态:请求后断言前,后置:断言后析构过程.。状态不勾选的 sql 是不会被后续构建到脚本中的。


5.redis
首先说的是连接 redis 库的配置:
填入 redis 的域名或者 ip,端口(选填默认 6379),密码(选填)和一个唯一的 NosqlDb 的名称

执行任务的时候就可以选择配置的 NosqlDb 的名称,对应的会生成一个 redis 对象,赋给一个全局变量,在脚本中执行

可用选择操作的 redis 数据类型两种字符串和列表
可选择是否是增删或者查询;执行的顺序也可以供 3 种选择,都是与 sql 处保持一致
需要提下的是 Nosql 定义的类型:
字符串,增:{"foo1":"bar1","foo2":bar2"}查 foo1key 和 foo2key 的 value:["foo1","foo2"] 删除:["foo1","foo2"]
列表,增:{"foo1":[1,2,3],"foo2":["bar1","bar2","bar3"]}查 foo1key 的第 3 个和 foo2key 的第 2 个:{"foo1":2,"foo2":1}删除:["foo1","foo2"]

6.配置页面
redis 配置页面上方已经介绍了,mysql 的配置页面也差不多,不过 redis 执行一个任务的时候只能选取一个,而 mysql 或者 sql server 可以多库,跟 sql 页面绑定互动

访问地址的话就是配置接口的 url,默认 ip,不存在则用域名

7.邮件
在邮箱页面配置数据,发件人邮箱,接收人邮箱,发送服务器,发送端口,用户名,密码,发送人头部信息,收件人头部信息,标题头部信息。这
里是以标题头部信息作为唯一信息标识。邮箱密码加密处理,执行任务的时候解密处理。编辑的时候如果不动加密后的密码,则密码不做修改,修改
了密码,则明文密码加密。

执行的时候,打开发送邮件的开关,勾选配置的邮件,邮件会发送 3 个附件,html 文件和执行成功和断言失败的文件,如果其中那个文件没有,则不选择发送


8.执行
1.生成脚本
勾选接口,然后生成任务
服务端会创建任务名的文件夹,文件夹下创建 testcase 和 report 文件夹,testcase 存放脚本,report
存放报告,脚本是以接口名作为文件名和类名,用例名作为方法名,生成 unittest 单测脚本。



2.执行任务
执行的过程进度是可见的 具体执行到哪个用例

执行可以选择单次执行和定时任务执行。单次执行,选择环境,定时任务,失败重跑次数,发送邮件,关闭定时任务。定时任务,选择环境,定时
任务,失败重跑次数,发送邮件,将这些数据写入数据库中,等待定时任务被调用。定时选择 crontab 的方式,如图就是分钟指定了 00,小时指定了
02,其他选择不指定,就是在每天 2 点整跑。

9.报告
任务不删除,报告是永存的

有两个按钮,一个查看邮件报告,一个是查看日志报告


可以查看去 mongo 中查看返回值,执行 id 和用例名定位唯一用例数据,用 responseJson 把返回值包了一层

首页的报告是对一个执行的总的数据的一份收集,展示了用例数,任务数,错误率,今日反馈数,前两者都是任务状态是 true 的情况下。
折线图反馈的是最后 5 次执行的状况下。饼图表示所有 case 的情况下,成功的,断言错误的,失败的(测试代码错误和接口直接 500)。
下方有一列展示所有 case 的反馈信息,还有一列表示今日错误 case 的反馈信息。

10.自定义扩展函数


举个例子异步接口 wait_time 方法
定义之后在用例页面断言配置 ${__wait_time(3)},那么他在处理数据之前识别到 wait_time 方法先去等待 3 秒,在执行断言

拓展

1.单步 debug 场景不通,需要生成任务才可以执行,单次调试后,根据当次返回值,勾选断言,无须手动填写
2.数据来源,结合公司的接口管理平台 YAPI,swaage 等,根据规则自行生成用例的参数
3.测试方面用 postman 和 jmeter 用的多,能自行导入或者导出到该平台
4.需要根据开发修改的部分,得到变更接口的信息,组成相关任务,进行测试
5.告警集成公司的 OA 告警系统调用企信等,通知相关人
6.结合持续集成达到门禁效果,开发任务接口,结合构建平台,譬如说 jenkins 有个部署后置方法,写个脚本调用该接口。
7.训练错误模型,根据平台日志模型和错误码,进行快速开发或者测试脚本和数据问题。
8.结合各自公司的中间件优化平台的性能和执行效果

独立开发项目,大家多多支持,接下来我应该停更这个项目
新版平台拥有了数据权限,接口用例管理的显示数据都是跟着模块走的,模块又是跟着登录的用户走的;圈红可以供大家尝试用,地址:http://47.102.110.163:8000
我应该会分 50 个演示地址的账号给大家,想要的可以发我登录名,一个项目名和一个模块名。操作过程中有问题的,我可以帮忙解决。


↙↙↙阅读原文可查看相关链接,并与作者交流