研发效能 【Down】Django rest framework&Celery&React 趋向于场景用例,兼容用户行为的测试平台

麻薯 · 2022年03月16日 · 最后由 麻薯 回复于 2022年03月23日 · 4554 次阅读

前言:市面上有很多开源的接口测试平台,各有所长。平台化的目的是易于维护和操作。Down 能够更加符合测试人的操作行为,像维护功能用例一样维护接口用例。

技术架构

Down 采用了 Django rest framework 作为后端 web 框架,尊重 restful 接口标准,可按照模型生成对应 swagger 文档,方便开发者进行平台接口调试。

前端采用了 React 库 (初学者不要轻易尝试) 进行编写,引用目前较流行的后台管理组件库 Ant Design,页面写的不好,请各位大佬轻喷。但交互是相对友好的(毕竟自己不但是个测开,还是个测试人员,做出来连自己都用的不顺手就不合适了。)

异步任务管理组件为 Celery,熟悉 python web 框架的不会对这个库陌生,可结合 django_celery_results 在 django-admin 查看管理后端任务执行和 log。并结合 django_celery_beat 完成定时任务调度。

功能简介

功能模块脑图

1 接口管理

讲道理,我 hate 配置接口,要调试一个接口,需要在 postman 中维护一堆接口配置信息,维护 query 参数,还不能出错,让人疯癫。我只想填参数值,然后点击调试。 只要遵循 restful 的接口标准,可以在 Down 中进行 OpenAPI 导入,自动生成当前项目对应接口。

导入后只需要配置好对应接口环境,就可以对接口进行在线调试了。

tip:回调参数设置完成之后,根据填写的 jsonpath 语法,可以对接口参数进行取值展示在回传值中。这个功能待会在用例配置中会说到。

2 环境管理

接口是不会单单纯纯的开放给各位进行随便调用的,多多少少都有鉴权这块的校验,讲白了就是需要用用户名密码去换取对应接口的通行证。如何在接口测试系统中去跨过这道坎,我觉得是很关键的。

在 Down 中,我用的是环境 + 鉴权环境 +UDF 自定义函数的方式进行管理,将 UDF 调用鉴权返回的序列化参数存储在 redis 或是数据库后端中。在调用接口的同时调取 redis 或是数据库中的记录,直接拿到对应通信证,便不需要再接口调用中去实时获取 token 值放入接口 header 中调试。

UDF 函数定义(直接调用存储序列化鉴权结果)

3 用例管理

用例基本信息配置

3.1 步骤类型:接口执行

接口执行步骤可根据配置接口进行直接测试调用,方便接口步骤配置调试。

根据上下文需要获取传递的参数进行回调参数配置,回调参数采用 jsonpath 语法获取。
并将参数调用名填写到对应接口参数中。

断言取值同时也是按照 jsonpath 语法取值,通过多种断言方式进行断言。断言失败则当前用例执行失败。

3.2 步骤类型:SQL 执行/查询

sql 执行查询,可对配置权限下对应表和数据进行操作,数据库读写返回结果封装为 json 返回,依然可以沿用其他步骤 jsonpath 取值和断言,方便步骤连续。

sql 查询

sql 执行异常返回

3.3 步骤类型:轮询

轮询接口,有些接口发送请求后后台结构并非马上执行完,如果单纯的只是做一个暂停时间来判断是否正常执行完成,无法做到准确性那么高,本步骤通过设置轮询次数和轮询间隔来判断某些异步任务是否执行完成。

通过设置轮询退出条件设置,当轮询退出条件所有满足的时候,则退出当前轮询,否则按照设置的次数和间隔直到次数完成,退出轮询后会进行回调函数取值和断言执行

3.4 步骤类型:回调列表循环

在回调参数中,获取的值为一个列表,需要循环对一个列表的值进行取值。进行列表循环取值,并将值分别传入接口作为接口参数,可利用一个回调列表进行多接口单独传参执行,循环列表值。

回调参数列表内容为字符串列表则无需设置循环键 (替换参数为回调参数"__list__.item"),如果回调参数列表为对象列表则需要设置对象取值键以及替换参数 (参照"_id_"格式)

3.4 步骤类型:等待时间

字面意思:等待 n 秒

4 日志管理

根据执行结果可查看对应用例执行结果日志,耗时,条数,断言验证等。

用例日志列表

用例详细日志

5 套件管理

  • 将多个用例组成为一个测试套件,当有条件触发时,将执行测试套件下所有用例,并作为一个任务记录在任务日志中

  • 测试套件有自己的执行环境,单独的用例可以有自己的执行环境,用例如没有特殊指定执行环境,则按照测试套件配置环境进行执行

  • 如果配置了套件前置用例,则所有前置用例所有的回调参数将会带入到测试套件其他的用例中,其他用例可直接配置前置用例的回调参数进行传参

测试套件日志

😄平台为个人自研开发,如有做的不合理的,各位大佬轻喷,欢迎在评论区讨论。后续会考虑开源,请耐心等待。感谢多位小伙伴对 Down 的关心与支持。

特别感谢 woody 哥,提供被测项目 pity 平台。打一波广告pity-github

在线体验地址

Down 测试平台

账户名、密码:tester/test@123456

欢迎创建项目进行验证。

共收到 12 条回复 时间 点赞

大佬牛逼!

比较感兴趣在实际业务中落地的情况,可以分享下源码吗?😂

感谢捧场🙌

慢慢 回复

😘

可以分享下源码吗?

大佬👍 👍 👍 👍 太厉害了

接口参数体是用于干嘛的

阿杰 回复

根据 openapi 的模型生成对应的接口消息体,但是示例里面没有对应接口模型,所以生成为空

仅楼主可见

太牛逼了大佬

麻薯 #12 · 2022年03月23日 Author
阿杰 回复

在线运行是通过创建一个临时文件的方式调用 subprocess 进行文件执行,并返回执行结果,这种方式说实话是有很大的安全性问题,目前来说只能限制用户不能对服务器进行命令行的操作。但毕竟不是开放性的系统,相信测试的小伙伴们会准寻系统操作的守则。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册