接口测试 自研接口测试平台 requestnew

letme · February 15, 2019 · Last by 隔壁老牛 replied at January 04, 2022 · 5821 hits
本帖已被设为精华帖!

接口测试平台 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 个演示地址的账号给大家,想要的可以发我登录名,一个项目名和一个模块名。操作过程中有问题的,我可以帮忙解决。

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

想要的可以发我登录名,一个项目名和一个模块名

Author only
Author only

报告模板是用的我写的那个么?好像啊。。。。

尹全旺 回复

应该是可能还是比较早的版本了,我稍微改了下结构和样式

7Floor has deleted
8Floor has deleted
9Floor has deleted
10Floor has deleted
letme #11 · February 16, 2019 Author
AzoraLeo 回复

密码是 Rl123456

letme #12 · February 16, 2019 Author
yideng-dst 回复

密码是 Rl123456

现在搞各种平台的真是太多了,一个人或几个人花个把月就搞起来了。

letme #14 · February 16, 2019 Author
花纹虎 回复

是的 所以这个平台我也不准备再做下去了 roi 太低了

大神,能分配个账号体验下这个平台?

letme #16 · February 18, 2019 Author

私发我登录名,一个项目名和一个模块名

Author only

大神,给我一个测试账号,试用一下

letme #19 · February 18, 2019 Author
小嗨 回复

密码 Rl123456,test 作为项目名太通用了 我去重,帮你换了一个

能否提供一下账号

letme #21 · February 19, 2019 Author

统一回复:要用的私发我登录名,一个项目名和一个模块名

Author only
Author only
Author only
letme #25 · February 19, 2019 Author
夜兔君 回复

密码 Rl123456

letme #26 · February 19, 2019 Author

好了密码是 Rl123456

平台好做,关键是解决问题,我们也做了一个类似的,但是效果一直不太理想,哎

Author only
Author only
Author only
Author only

赞开源精神! 功德无量

Author only
Author only
Author only
Author only
Author only
Author only
Author only
letme #40 · February 25, 2019 Author

统一回复·:楼上的体验账号我都开通了,密码都是 Rl123456。有个楼想要同个项目下 5 个模块的,我给了两个模块。可以关注下,github 可以给个 star 支持下

Author only
Author only
Author only
letme #44 · February 28, 2019 Author

楼上需要的账号都创建好了,密码统一是 Rl123456

Author only
46Floor has deleted
letme #47 · March 05, 2019 Author

密码是 Rl123456

Author only
Author only

感觉这些平台的样式都似曾相识

Author only
Author only
Author only
letme #54 · March 18, 2019 Author

密码:Rl123456

letme #55 · March 18, 2019 Author
qdj0226 回复

讨论群:655981739

Author only
Author only

给个登录账号试试

怎么解决前置接口依赖的问题

能否给个帐号和密码体验一下,感觉和那个开源项目有点像 https://testerhome.com/opensource_projects/37

letme #61 · April 11, 2019 Author
suda23 回复

返回值存 mongo,控制依赖和被依赖的权重,让被依赖先执行,配置依赖和被依赖的关系,解析被依赖的返回值

letme #62 · April 11, 2019 Author
VIP 回复

像的很多啦 给我一个登录名,项目,模块名,我给你开个空间

yinyongjie 回复

给我一个登录名,项目,模块名,我给你开个空间

letme #64 · April 11, 2019 Author
丫滴 回复

给我一个登录名,项目,模块名,我给你开个空间

letme #65 · April 11, 2019 Author
文若 回复

好了 密码 Rl123456

Author only
Author only

lansejingyu

为什么我还是觉得有点难度呢,需要掌握的东西太多了,哎😣

Author only
Author only
letme #72 · May 14, 2019 Author

楼上两位的密码都是 Rl123456

楼主 求一用户名和密码 谢谢。

关于你这个平台中,1,运行测试任务的时候,你的数据库中是默认将用例中涉及的数据都维护好了吗。还是说你的数据库是默认新的库,然后数据库的操作在用例中动态生成。2.你是如何处理接口测试时的接口关联的呢?能分享下经验吗。

letme #75 · May 21, 2019 Author
jackyin 回复

1.测试数据库是 django 服务的库,会先生成单测脚本,数据写到单测脚本里,涉及到的动态数据可以去上一个接口拿或者开发库里动态获取 2.返回值存 mongo,设置用例的权重,控制执行顺序,根据路径取对应的数据

letme 回复

你的意思是,相当于本身就有个测试库脚本,这个脚本里面有需要接口测试的基本的一些前置等数据, 2, 接口管理你是通过控制接口顺序然后通过 mongo 的存储,然后从这些地方进行获取是吧,好的,谢谢,我这边想用 mock 来代替接口关联,但是我又害怕这种情况下又无法反应出接口的数据流转,这种方式是否可行呢?

纯 linux 环境部署的话,是个什么步骤?

Author only
Author only
shzc · #80 · June 13, 2019
Author only
letme #81 · June 19, 2019 Author
jackyin 回复

是的 mock 也可以,如果只关心自己的部分,可以解决下游依赖不稳定,等等问题

letme #82 · June 19, 2019 Author
王巍 回复

步骤也一样的,除了改源码和装 mongo,mysql 其他的就是个 Django 服务

83Floor has deleted
letme #84 · June 19, 2019 Author
skyyy003 回复

好了 密码为 Rl123456

letme #85 · June 19, 2019 Author

密码为 Rl123456,可以试下

letme #86 · June 19, 2019 Author

新版本 2.2.2 功能变更:
1.新增生效中用例数,点击带上该行用例名跳转到用例页面
2.sql 可以按照数据库名称搜索
3.优化接口名、用例名支持中文,后端限制不支持全数字
4.添加的容易填错信息的 placeholder 引导
5.修改前端框架引用,提升性能
6.将页面中引入移至页面外引用,jquery 代码移动到 pageDeal 文件,去除冗余代码
7.修复执行任务造成的数据权限混乱的问题
8.生成脚本加上了接口无用例的校验,防止执行用例时造成白屏问题
tip:
演示地址已经更新,演示地址部分功能还是限制
http://47.102.110.163:8000/
源代码不加任何限制,推至 dev 分支https://github.com/happyletme/requestnew/tree/dev
error:
直接 github 上提 issues,尤其繁琐的交互,引导的误区和特殊异常
QQ 群:655981739

Author only
letme 关闭了讨论 14 Jul 19:23
letme 重新开启了讨论 14 Jul 19:23

http://47.102.110.163:8000/
楼主好,请问服务器是不是关了?

letme #91 · December 07, 2019 Author
lee 回复

nginx 端口改了 8090

优秀如你,学习~

Author only


哈喽,请问扩展 auth_user 表这样写是不是不会 sync 这个字段到数据库

95Floor has deleted
GHQ · #96 · March 09, 2020
Author only

感谢大佬开源的平台,使用了 django 和 UI,java 转 python 太难了 o(╥﹏╥) o

好像不支持多场景吧?给个账号体验下

Author only
Mceng · #100 · May 20, 2020
Author only

adminLiu 作者帮忙开个账号呗

恒温 将本帖设为了精华贴 13 Oct 18:36
103Floor has deleted
104Floor has deleted
Author only

平台部署完后,跑起来各种错误。。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up