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

letme · February 15, 2019 · Last by ciciFbl replied at June 21, 2019 · 7398 hits

接口测试平台 requestnew

源码和文章

服务与源码地址

阿里云服务演示地址:http://47.102.110.163:8000
想要尝试的可以发我登录名,一个项目名和一个模块名,我为大家创建项目空间
源码地址: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个演示地址的账号给大家,想要的可以发我登录名,一个项目名和一个模块名。操作过程中有问题的,我可以帮忙解决。

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

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

Author only
Author only

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

尹全旺 回复

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

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

密码是Rl123456

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

密码是 Rl123456

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

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

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

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

letme #16 · February 18, 2019 作者

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

Author only

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

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

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

能否提供一下账号

letme #21 · February 19, 2019 作者

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

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

密码Rl123456

letme #26 · February 19, 2019 作者

好了密码是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 作者

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

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

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

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

密码是Rl123456

Author only
Author only

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

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

密码:Rl123456

letme #55 · March 18, 2019 作者
qdj0226 回复

讨论群:655981739

Author only
Author only

给个登录账号试试

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

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

letme #61 · April 11, 2019 作者
suda23 回复

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

letme #62 · April 11, 2019 作者
VIP 回复

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

letme #63 · April 11, 2019 作者
yinyongjie 回复

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

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

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

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

好了 密码Rl123456

Author only
Author only

lansejingyu

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

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

楼上两位的密码都是Rl123456

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

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

letme #75 · May 21, 2019 作者
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 作者
jackyin 回复

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

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

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

83Floor has been deleted
letme #84 · June 19, 2019 作者
skyyy003 回复

好了 密码为Rl123456

letme #85 · June 19, 2019 作者

密码为Rl123456,可以试下

letme #86 · June 19, 2019 作者

新版本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
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up