当前位置: 首页 > 后端技术 > Python

HttpRunnerv4.0正式发布:一文读懂v4.0的前世今生和未来

时间:2023-03-26 16:39:18 Python

v4.0诞生背景HttpRunner迭代近5年,即将进入v4.0版本.我很高兴HttpRunner已经拥有庞大的用户群和知名度。当你在搜索引擎和各种主流技术社区中搜索HttpRunner时,你可以看到一些用户自发分享的文章,甚至还有提供付费课程的培训课程,有人写书的时候做了更大的介绍。这个反馈给了我很大的鼓励和动力让HttpRunner变得更好。HttpRunnerv4.0作为一个全新的大版本诞生的背景是什么?期望的目标是什么?正如我在2021年终总结中提到的,我的团队从去年开始就专注于ToB方向。经过一段时间的探索和思考,我们选择以接口性能测试工具为切入点(产品命名为QuickRunner),并计划采用OpenCore的商业模式(核心能力基于开源的HttpRunner),希望通过这种方式更多地接触到用户,收集反馈,利用开源社区打磨产品。但是,现有的HttpRunner可能无法直接满足我们的需求。因为我们的核心目标是做一个性能测试工具,对发送压力的能力和数据的准确性有非常高的要求;而之前的HttpRunner是基于Python开发的,性能测试部分使用了Locust,其单机发送压力和数据准确性都存在较大问题。想了想,打算按照HttpRunnerv2的思路,用Golang改写。在保持使用基本不变的前提下,我会做的更丰富,运行更稳定,性能更强,更容易部署和使用。同时,为了防止在初始迭代过程中Golang版本影响现有的Python版本,我还新建了一个项目,取名为HttpRunner+(简称hrp),并在项目结构完成后合并到HttpRunner仓库中基本稳定。这是我们即将发布的v4.0版本。v4.0的核心目标总的来说,HttpRunnerv4.0的核心目标是支持QuickRunner成为业界领先的专业级集成API测试解决方案。具体来说,HttpRunnerv4.0在继承v2/v3已有功能并保持向前兼容的基础上,将着重改进以下几个维度:易用性、功能强大:这是HttpRunner从未改变的目标;v4.0在保持简单易用的基础上,重点支持双执行引擎、多种网络协议、多种编程语言、多种测试目的等功能。数据准确:v4.0致力于成为专业级的API测试工具,无论是单用户界面请求耗时和网络性能采集,还是高并发下的性能测试指标,准确的测试结果数据是底线,必须通过严格的基准测试海量并发:着力提升压测能力,占用资源更少,压力生成效率更高,单机轻松支持万级并发压力,结合分布式稳定性支持百万级真实并发压测开源生态:全面对接API相关工具和标准,增强数据流和二次开发可扩展性v1/v2/v3/v4版本对比概览你可能还是有点迷糊,HttpRunnerv4和以前的v1/v2/v3/hrp版本?为了让大家的认知更加清晰,我整理了下表,详细比较了各个版本之间的关键差异。版本v1v2v3HttpRunner+v4发布时间2018.3.72019.1.12020.03.102021.11.182022.5.1开发语言PythonPythonPythonGolangGolang+Python版本号规范(semver)?????互联网协议HTTP(S)/1.1.HTTP1)(S)/1.1HTTP1(S)HTTP(S)/1.1多协议HTTP(S)/HTTP2/WebSocket/_TCP/RPC_Script转换工具HARHARHARHARHAR/_Postman/Swagger/Curl_Engineering脚手架?????测试用例(集)格式v1v2v2v2v2测试用例分层机制v1v2v2v2v2脚本格式typeYAML/JSONYAML/JSONYAML/JSON/pytestYAML/JSONYAML/JSON/pytest/gotest脚本格式校验?[jsonschema]??TODO脚本编写语法提示??pytest链调用gotest链调用gotest链调用+pytest链调用脚本执行引擎PythonunittestPythonunittestPythonpytestGo自研Go自研+Pythonpytest插件语言(debugtalk.xx)PythonPythonPython多语言(Go/Python)多语言(Go/Python/_Java/etc._)参数提取机制正则表达式+点分隔符jmespath+回复gex+点分隔符jmespathjmespath+regexjmespath+regexskip机制????TODO接口测试报告html自研(jinja2)html自研(jinja2)pytest-html/allurehtml自研(Go模板)html自研(Go模板)+pytest-html/allure性能测试引擎PythonLocustPythonLocustPythonLocustGoBoomerGoBoomer运行环境依赖Python2.7/3.3+Python2.7/3.5+Python3.7+pytest无需依赖Go引擎无依赖
pytest引擎依赖Python3.7+网络性能采集?????安装部署方法pippippipcurl/wgetcurl/wget注:v4中斜体表示暂不支持,但计划实现。从上表可以看出,HttpRunnerv4颇有几分金刚葫芦娃的意思,包括了之前所有版本的功能,并且增加了很多新的特性。HttpRunnerv4=v2+v3+hrp+...在用户体验和用例格式兼容性方面,v4也会兼容之前的v2/v3/hrp,所以后续对HttpRunner的维护会转移到v4版本,以前的版本将不再单独维护。v4.0核心功能介绍在v4.0版本中,对HttpRunner进行了整体重新设计,重点支持双执行引擎、多种网络协议、多种编程语言、多种测试目的。这里我们只选取部分进行简单介绍,后续会补充完整的用户文档。双执行引擎HttpRunnerv4.0可能带给很多用户的第一直观印象就是将项目语言替换为Golang。这种说法其实不是很准确。准确的说,HttpRunnerv4.0同时使用了Golang/Python两种编程语言。底层会有两个相对独立的执行引擎。目标是兼具Golang的高性能和pytest的丰富生态。具体实现上,HttpRunnerv4.0使用Golang基本实现了除用例执行引擎(hrprun)和压测引擎(hrpboom)、脚手架工具(hrpstartproject)、使用案例生成工具(hrphar2case)、脚本转换工具(hrpconvert)等都是先用Golang写的,目的是提高执行效率(毕竟是Go)和代码质量(静态语言&类型系统).唯一继续用Python编写的是基于Pythonpytest的接口测试执行引擎(hrppytest)。主要考虑是支持pytest丰富的插件生态,保持对v3的兼容。不过需要注意的是,使用HttpRunnerv4.0并不一定需要Go语言的基础。HttpRunner的测试用例脚本支持:文本形式:JSON,YAML代码形式:pytest和gotest,动态运行逻辑(plugin)支持多种编程语言(详见下文),包括Python。因此,可以选择以JSON/YAML格式编写维护测试用例,选择Python作为插件语言,使用和体验基本可以和HttpRunnerv2.x保持一致。或者可以选择pytest代码形式的脚本,在用户体验上基本可以和v3.x保持一致。但如果期望使用HttpRunnerv4.0进行专业的性能测试,还是选择使用golang编写插件比较好。单机压力性能(QPS)可达2w以上,远非Python插件所能企及。多网络协议HttpRunnerv4.0不再局限于HTTP协议,现已成长为多协议可扩展测试工具。截至目前,HttpRunnerv4增加了对HTTP/2和WebSocket协议的支持,RPC(thrift)协议正在开发中,未来将逐步支持TCP/UDP/gRPC等协议类型。不过,HttpRunner会继续保持这个命名方式。HTTP作为使用最广泛的网络协议,可以作为协议的代表,就像Postman中的POST一样,也是有道理的。针对多种编程语言的动态运行逻辑(插件)部分,HttpRunnerv4.0不再局限于Python,而是采用了gRPC方案。因此,gRPC理论上支持10+种HttpRunnerv4可以支持的主流编程语言。目前支持的插件语言:GoPythonJava(正在规划中,期待贡献)这部分能力已经作为基础组件被抽取出来,感兴趣的可以参考httprunner/funplugin。Multi-testHttpRunner一开始就是以“能力复用”为目标而创建的。预计只需编写和维护一套脚本,即可同时实现接口测试、性能测试、服务可用性监控等能力。在v4.0版本中,HttpRunner更进一步,将增加对“网络性能监控”的支持,实现数字体验监控(DEM)的能力。同时v4也对step的类型进行了抽象,方便扩展。基于这种机制,我们可以扩展对新的网络协议类型的支持,也可以支持新的测试类型,比如SQL操作或者UI自动化。我们甚至可以在一个测试用例中混合调用多个不同的Step类型,比如实现HTTP/RPC/SQL/UI混合场景。是不是很有想象力?开源项目运营一个开源项目,不仅仅是把代码公开,还要建立一个良好的用户社区,帮助和引导更多的人加入进来。在这方面,HttpRunner一直做的不是很好,有必要加强对开源社区运营的投入。从v4.0版本开始,HttpRunner期望在以下几个方面进行改进。核心开发团队截至目前,已有21位HttpRunner的开发者贡献了代码。虽然看起来不错,但是之前主要的开发和维护工作基本都是我一个人在做,这对项目的健康是非常不利的。幸运的是,在QuickRunner项目开始之初,我们团队又投入了2名同学进行HttpRunner的开发;与此同时,另一位同样重度使用HttpRunner的其他院系同学也加入了开源共建。因此,HttpRunner目前有4个真正的核心开发人员:debugtalk:负责项目的整体架构和规划;参数化数据驱动,html报告等bbx-winner:贡献了HTTP2/WebSocket网络协议,benchmark数据精度测试等billduan:专注于pytest引擎部分,贡献了thriftRPC协议,集成SQL调用等。更新也在欢迎广大朋友参与,尤其是工作中重度使用HttpRunner的朋友,“独行者速行,众行远”。用户调查问卷为了更好的收集HttpRunner的用户反馈,明确需求的迭代路径,我们从今年开始尝试了用户调查问卷的形式。HttpRunner用户调查问卷=>HttpRunner第一轮用户调查报告(2022.02)HttpRunner增值服务调查问卷QuickRunner用户需求调查通过调查问卷,我收集了很多有价值的反馈和建议,对我的工作起到了非常重要的作用HttpRunner效果的开发。非常感谢大家的积极参与,也希望大家以后可以通过这个渠道给HttpRunner更多的反馈(共同的需求会高质量的实现~)。IssueManagement&VersionPlanningGitHubIssues是HttpRunner的项目需求管理工具,也是HttpRunner用户和开发者的主要沟通渠道。如果您在使用HttpRunner过程中遇到问题,可以通过issue反馈(建议先搜索重复问题),我们通过其他渠道收集到的问题也会在这里汇总。同时,为了更高效地管理issue,HttpRunner设置了多个维度的标签(Labels),每个issue会使用1~N个标签进行组合管理。详情请阅读HttpRunner的IssueManagementMechanism。另一方面,HttpRunner从v4.0就开始了版本规划。具体形式是GitHub的里程碑功能,每个版本都会设置一个里程碑,比如v4.1,v4.2。然后我们会把所有的issue(包括新特性、优化、bug修复等)规划到具体的版本中,并在GitHub的Projects中进行管理。如果想了解HttpRunner后续的版本规划,可以在Projects查看。当然需求规划之后,也会动态调整。如果发现自己想要的功能比较晚,也可以多多反馈。再次,共同的需求将得到高质量的实现。用户使用文档在HttpRunner第一轮用户调研报告(2022.02)中,用户使用文档的投诉排在所有问题的首位,远超其他问题。这个问题真的很严重,我们必须在v4.0中修复它!目前确定了三项改进措施。用户文档统一用中文书写,以确保清晰易懂。整理出了一个文档计划,工作已经分配给了核心开发人员,文档的编写会安排在以后的工作日程中。除了用户文档,我们还将通过博客介绍主要功能特性的原理和机制,期待与您更多的交流与互动。文档链接:https://httprunner.com/docs/一些技术分享文章,HttpRunner微信也会同步公众号。HttpRunner用户交流社区有很多交流渠道,目前重点维护的有:TesterHome社区:已开通HttpRunner主题版块,也是HttpRunner项目的发源地。GitHub讨论:在GitHub上开放了讨论社区部分(公告、想法、问答、分享)。微信交流群:为了保证交流质量,特设置了一些门槛。您需要仔细填写一份调查问卷。如果以上方法都不能满足您的需求,您也可以添加我的个人微信(leolee023),但是加好友的时候需要稍微详细介绍一下自己(至少包括姓名和公司,最好是指明您希望交流的内容)。综上所述,以上就是HttpRunnerv4.0版本发布带来的主要变化。在今年MTSC大会的开源专场,我也会分享HttpRunnerv4.0的设计思路和核心原理,接下来可以在线下做更多面对面的交流。最后,我想宣布一个小消息。我们团队基于HttpRunner开发的集成API测试工具QuickRunner已经完成了第一个版本迭代,即将面向社区开放体验。感兴趣的朋友可以先关注一下。最后,开源并不容易。如果HttpRunner对你有帮助,请给它一个??star??鼓励一下。https://github.com/httprunner…