作为一名软件测试工程师来讲,很大程度上,都会有一个预知的成长过程:点点点 -> 自动化测试 -> 测试开发 -> 点点点
很久以前,在我刚刚接触 unittest 的时候,我一直看不起 pytest,什么东西!于是就用 unittest 做了一些简单的东西,享受着自动化带来的回归体验,久而久之,渐渐的体会到了 unittest 的臃肿,但是一切基于代码的调用仍然让我感觉很惬意(如果你也喜欢阅读源码)
后来我接触到了小菠萝(这个博客园自建主题,相信很多人都找不到了吧),是的,她发公告转移到了语雀,刚开始的语雀,我不得不吐槽,卡的要死,加载东西加载半天,不过,好在小菠萝的文章写的是真不错,我从中学到了很多,包括 pytest
某个年初,一波新型变异冠状病毒席卷魔都,从刚开始的日增几十几百到不可控制,让 99% 以上的人在二十一世纪的上海吃不上饭,居家隔离从刚开始通知的 7 天迎来了未知,出租屋中,我打开电脑,无聊的逛着 Github, 浏览着技术文章,这时我看到了 pytest,这不正好是个机会么,让对 pytest 感兴趣的我找到了事情做,基础的 pytest 代码实在是太方便了,比 unittest 灵活太多,于是根据我原有的 unittest api 框架,开始着手进行 pytest 改造
一款基于数据驱动的 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 了
(由于平台显示限制,点击下载流程图,查看高清版)
因为最初我的代码提交习惯:一次性提交,所以,我直接来了一个版本升级一次性提交,迎来了 0.0.2 版本标记,现在它开始支持数据参数化和 python 钩子函数了
紧接着请求前后置,用例关联,webhook,redis,jwt-token 陆续进行了更新,感兴趣的小伙伴可以查看提交网络图
现在,我以发版的形式进行更新记录,这样也更有利于提供我持续更新它的动力
不确定这是不是一个有用的功能,但我一直在使用它,从最初的 UI 自动化测试框架设计开始,它就被作为我的一个标砖设计进行实施;基本原理是通过配置文件设置项目名称,从而达到控制一切路径和路由的目的,目的是可以将多个项目统一存放在一个框架中,并且测试数据互不干扰
测试数据完全与测试用例分离,无需进行测试用例修改,只需要修改测试数据就能完成测试,并且测试数据经过严格的自动解析与验证,我在数据验证上面花费了大量时间,尽可能可以在日志和测试报告中能轻松地精确定位到错误触发点
在使用接口测试工具 postman,apifox 等工具的时候,环境切换是我经常使用的一个功能,于是,我将它集成到了框架中,这对目前比较流行的 openapi / restful 来说,是非常友好的,并且,同一个项目中的用例,对于不同的测试数据,可以选择不同的环境,同时支持在环境文件中设置变量
变量支持是一个非常好的功能,参考 apifox,我添加了全局变量,局部变量,缓存变量;另外还添加了关联变量
这是关联变量的另一个说法,就是一个接口的数据依赖另一个接口请求后的数据,从而达到数据依赖,前提是,上一个接口请求成功,否则都将失败
目前,它仅仅是支持基于 python 代码的,我并没有在源代码中添加大量方法,这里需要你自由发挥,对于基础的 faker 数据,很容易添加,但是我认为,它不仅局限于此,或许,后期还会进行改造,目前,faker 数据应该是一个比较常见的使用方法
日志记录是自动的,对于请求而言,请求数据是完全记录的,包括文本中,测试报告中,同时,你可以通过开关控制是否开启
常见的断言类型包含 json 断言(jsonpath),sql 断言(jsonpath), jsonschema 断言,正则断言,我还自己编写了一个原生 assert 断言方法,它可以支持绝大部分简单形式的 python assert,并且还通过 dirty-equals 进行了扩展支持,请注意,未进行大量测试
测试用例支持通过 CLI 自动生成,不需要频繁的手动创建,你不需要担心它们的文件,类,方法命名,他们是基于测试数据文件创建的
这是一个基本功能,不需要过多说明,支持 html, allure
基本功能,支持飞书,钉钉,企业微信,邮箱
......
使用文档是基于 vuepress 编写的,好看,好用,感谢龙哥推荐
See documentation for more details.
需要更多说明请留言吧,我将进行补充😆