接口测试 接口自动化测试框架 HttpFPT

wu-clan · 2024年03月12日 · 最后由 wu-clan 回复于 2024年03月14日 · 5209 次阅读

前言

作为一名软件测试工程师来讲,很大程度上,都会有一个预知的成长过程:点点点 -> 自动化测试 -> 测试开发 -> 点点点

很久以前,在我刚刚接触 unittest 的时候,我一直看不起 pytest,什么东西!于是就用 unittest 做了一些简单的东西,享受着自动化带来的回归体验,久而久之,渐渐的体会到了 unittest 的臃肿,但是一切基于代码的调用仍然让我感觉很惬意(如果你也喜欢阅读源码)

后来我接触到了小菠萝(这个博客园自建主题,相信很多人都找不到了吧),是的,她发公告转移到了语雀,刚开始的语雀,我不得不吐槽,卡的要死,加载东西加载半天,不过,好在小菠萝的文章写的是真不错,我从中学到了很多,包括 pytest

某个年初,一波新型变异冠状病毒席卷魔都,从刚开始的日增几十几百到不可控制,让 99% 以上的人在二十一世纪的上海吃不上饭,居家隔离从刚开始通知的 7 天迎来了未知,出租屋中,我打开电脑,无聊的逛着 Github, 浏览着技术文章,这时我看到了 pytest,这不正好是个机会么,让对 pytest 感兴趣的我找到了事情做,基础的 pytest 代码实在是太方便了,比 unittest 灵活太多,于是根据我原有的 unittest api 框架,开始着手进行 pytest 改造

HttpFPT

一款基于数据驱动的 HTTP 接口自动化测试框架

命名:HTTP + Fast(Favorite)+ Python + Test

简称:HttpFPT

发展

pytest 很好入门,边看边改造,基于 pytest 的接口自动化框架它就改造完成了,我最初的 unittest api 框架仅仅包含接口的请求数据,虽然是数据驱动,但是仅仅包含发送请求,像前后置,参数化,环境化等等什么都没有,固然,此时的 pytest api 亦是如此;

疫情那段时间 httprunner 非常火爆,很多大佬们都将它作为了基础请求代码开发测试平台,于是我有了加入了 httprunner 群体的想法,httpfpt 被搁置了... httprunner 确实好用,而且开源,用了没多久,我产生了继续更新 httpfpt 的想法,在无敌哥的交流群里面,包括龙哥大君等众多小伙伴都有推荐过七月小姐姐的自动化测试框架,于是我将七月的代码 clone 到了本地,开始阅读源码

小插曲:在创建 httpfpt 期间,我在吃不饱饭的上海还顺便学习了 fastapi 和 django-ninja,并且使用 django-ninja 直接开始了自动化测试平台的实验:NinjaXia,但这对于我来讲是跨越性的,并且在没有足够技术支撑的情况下,我在这上面花费了大量时间,同时也是只有简单的发送请求

七月当时的代码风格我不是很喜欢,感觉 J 里 J 气的,受到 PEP8 的影响,并且我有高度强迫症,体会了一些框架设计的思路,我便没再继续阅读了

在此期间,国内也同时出现了一个接口平台广告巨头:Apifox,不过,说实话,我挺喜欢它的设计的,并且很多功能抄 postman 抄的炉火纯青,为此,结合 Apifox 和 postman,我开始继续改造 httpfpt 了

设计

(由于平台显示限制,点击下载流程图,查看高清版)

httpfpt\_flowchart

因为最初我的代码提交习惯:一次性提交,所以,我直接来了一个版本升级一次性提交,迎来了 0.0.2 版本标记,现在它开始支持数据参数化和 python 钩子函数了

紧接着请求前后置,用例关联,webhook,redis,jwt-token 陆续进行了更新,感兴趣的小伙伴可以查看提交网络图

现在,我以发版的形式进行更新记录,这样也更有利于提供我持续更新它的动力

功能点

1. 多项目支持

不确定这是不是一个有用的功能,但我一直在使用它,从最初的 UI 自动化测试框架设计开始,它就被作为我的一个标砖设计进行实施;基本原理是通过配置文件设置项目名称,从而达到控制一切路径和路由的目的,目的是可以将多个项目统一存放在一个框架中,并且测试数据互不干扰

2. 测试数据隔离

测试数据完全与测试用例分离,无需进行测试用例修改,只需要修改测试数据就能完成测试,并且测试数据经过严格的自动解析与验证,我在数据验证上面花费了大量时间,尽可能可以在日志和测试报告中能轻松地精确定位到错误触发点

3. 环境配置

在使用接口测试工具 postman,apifox 等工具的时候,环境切换是我经常使用的一个功能,于是,我将它集成到了框架中,这对目前比较流行的 openapi / restful 来说,是非常友好的,并且,同一个项目中的用例,对于不同的测试数据,可以选择不同的环境,同时支持在环境文件中设置变量

4. 动态参数化

变量支持是一个非常好的功能,参考 apifox,我添加了全局变量,局部变量,缓存变量;另外还添加了关联变量

5. 数据依赖

这是关联变量的另一个说法,就是一个接口的数据依赖另一个接口请求后的数据,从而达到数据依赖,前提是,上一个接口请求成功,否则都将失败

6. 钩子函数

目前,它仅仅是支持基于 python 代码的,我并没有在源代码中添加大量方法,这里需要你自由发挥,对于基础的 faker 数据,很容易添加,但是我认为,它不仅局限于此,或许,后期还会进行改造,目前,faker 数据应该是一个比较常见的使用方法

7. 日志记录

日志记录是自动的,对于请求而言,请求数据是完全记录的,包括文本中,测试报告中,同时,你可以通过开关控制是否开启

8. 断言

常见的断言类型包含 json 断言(jsonpath),sql 断言(jsonpath), jsonschema 断言,正则断言,我还自己编写了一个原生 assert 断言方法,它可以支持绝大部分简单形式的 python assert,并且还通过 dirty-equals 进行了扩展支持,请注意,未进行大量测试

9. 测试用例自动生成

测试用例支持通过 CLI 自动生成,不需要频繁的手动创建,你不需要担心它们的文件,类,方法命名,他们是基于测试数据文件创建的

10. 自动测试报告

这是一个基本功能,不需要过多说明,支持 html, allure

11. 自动测试结果通知

基本功能,支持飞书,钉钉,企业微信,邮箱

xx. (more and more)

......

文档

使用文档是基于 vuepress 编写的,好看,好用,感谢龙哥推荐

See documentation for more details.

更多

需要更多说明请留言吧,我将进行补充😆

共收到 2 条回复 时间 点赞


代码复杂度 +++++++++++

2楼 已删除
disable 回复

Better Highlights 插件默认配置添加的注释中,现有代码中最高复杂度高达 1.5k%,但这毫不影响小白快速入门和落地(基于小白用户反馈)

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