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

letme · 2019年02月15日 · 最后由 隔壁老牛 回复于 2022年01月04日 · 5496 次阅读
本帖已被设为精华帖!

接口测试平台 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 条回复 时间 点赞
僅樓主可見

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

僅樓主可見
僅樓主可見

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

尹全旺 回复

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

7楼 已删除
8楼 已删除
9楼 已删除
10楼 已删除
letme #11 · 2019年02月16日 Author
AzoraLeo 回复

密码是 Rl123456

letme #12 · 2019年02月16日 Author
yideng-dst 回复

密码是 Rl123456

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

letme #14 · 2019年02月16日 Author
花纹虎 回复

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

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

letme #16 · 2019年02月18日 Author

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

僅樓主可見

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

letme #19 · 2019年02月18日 Author
小嗨 回复

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

能否提供一下账号

letme #21 · 2019年02月19日 Author

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

僅樓主可見
僅樓主可見
僅樓主可見
letme #25 · 2019年02月19日 Author
夜兔君 回复

密码 Rl123456

letme #26 · 2019年02月19日 Author

好了密码是 Rl123456

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

僅樓主可見
僅樓主可見
僅樓主可見
僅樓主可見

赞开源精神! 功德无量

僅樓主可見
僅樓主可見
僅樓主可見
僅樓主可見
僅樓主可見
僅樓主可見
僅樓主可見
letme #40 · 2019年02月25日 Author

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

僅樓主可見
僅樓主可見
僅樓主可見
letme #44 · 2019年02月28日 Author

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

僅樓主可見
46楼 已删除
letme #47 · 2019年03月05日 Author

密码是 Rl123456

僅樓主可見
僅樓主可見

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

僅樓主可見
僅樓主可見
僅樓主可見
letme #54 · 2019年03月18日 Author

密码:Rl123456

letme #55 · 2019年03月18日 Author
qdj0226 回复

讨论群:655981739

僅樓主可見
僅樓主可見

给个登录账号试试

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

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

letme #61 · 2019年04月11日 Author
suda23 回复

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

letme #62 · 2019年04月11日 Author
VIP 回复

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

yinyongjie 回复

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

letme #64 · 2019年04月11日 Author
丫滴 回复

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

letme #65 · 2019年04月11日 Author
文若 回复

好了 密码 Rl123456

僅樓主可見
僅樓主可見

lansejingyu

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

僅樓主可見
僅樓主可見
letme #72 · 2019年05月14日 Author

楼上两位的密码都是 Rl123456

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

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

letme #75 · 2019年05月21日 Author
jackyin 回复

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

letme 回复

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

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

僅樓主可見
僅樓主可見
僅樓主可見
letme #81 · 2019年06月19日 Author
jackyin 回复

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

letme #82 · 2019年06月19日 Author
王巍 回复

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

83楼 已删除
letme #84 · 2019年06月19日 Author
skyyy003 回复

好了 密码为 Rl123456

letme #85 · 2019年06月19日 Author

密码为 Rl123456,可以试下

letme #86 · 2019年06月19日 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

僅樓主可見
letme 关闭了讨论 07月14日 19:23
letme 重新开启了讨论 07月14日 19:23

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

letme #91 · 2019年12月07日 Author
lee 回复

nginx 端口改了 8090

优秀如你,学习~

僅樓主可見


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

95楼 已删除
僅樓主可見

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

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

僅樓主可見
僅樓主可見

adminLiu 作者帮忙开个账号呗

恒温 将本帖设为了精华贴 10月13日 18:36
103楼 已删除
104楼 已删除
僅樓主可見

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

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册