关于python:HttpRunner-v40-正式发布一文了解-v40-的前世今生与未来

2次阅读

共计 6150 个字符,预计需要花费 16 分钟才能阅读完成。

v4.0 的诞生背景

HttpRunner 通过近 5 年的迭代,行将进入到 v4.0 版本了。十分欣慰的是,HttpRunner 曾经有了较大的用户基数和知名度,在搜索引擎和各种支流技术社区搜寻 HttpRunner 都能看到一些用户自发分享的文章,甚至还有培训班以此开设了付费课程,以及有人写书时做了较大篇幅的介绍。这些反馈给了我极大的鼓励,让我有更大的能源将 HttpRunner 变得更好。

那 HttpRunner v4.0 作为一个全新的大版本,诞生的背景是什么?冀望达成的指标是什么呢?

在我的 2021 年终总结中有讲到,我所在的团队从去年开始重点投入到 ToB 方向。通过一段时间的摸索和思考之后,咱们抉择以接口性能测试工具作为切入点(产品命名 QuickRunner),并打算采纳 Open Core 的商业模式(外围能力基于开源的 HttpRunner),心愿能够通过这种形式更多地触达用户收集反馈,借助开源社区打磨产品。

不过,既有的 HttpRunner 可能还没法间接满足咱们的需要。因为咱们的外围指标是要做一款性能测试工具,对于发压能力和数据准确度具备十分高的要求;而之前的 HttpRunner 是基于 Python 开发的,性能测试局部应用的是 Locust,其单机发压能力和数据准确性都存在较大的问题。

通过短暂的思考后,我打算采纳 Golang 依照 HttpRunner v2 的思路重写一遍,在放弃应用形式根本不变的前提下,使性能更丰盛、运行更稳固、性能更强、更易部署和应用。同时,为了防止 Golang 版本在迭代初期过程中影响到已有的 Python 版本,我还新建了一个新的我的项目,命名为 HttpRunner+(简称 hrp),在我的项目构造根本稳固后才合并到 HttpRunner 仓库,这也就是咱们行将公布的 v4.0 版本。

v4.0 的外围指标

总的来说,HttpRunner v4.0 最外围的指标是撑持 QuickRunner 成为行业当先的专业级一体化 API 测试解决方案。

具体方面,HttpRunner v4.0 在继承 v2/v3 已有性能和放弃前向兼容的根底上,重点会在如下几个维度进行晋升:

  • 简略易用、功能强大:这是 HttpRunner 始终以来从未扭转过的指标;在放弃简略易用的根底上,v4.0 会重点反对双执行引擎、多网络协议、多编程语言、多测试用处等性能
  • 数据精准:v4.0 致力于成为一款专业级的 API 测试工具,不论是单用户的接口申请耗时和网络性能采集,还是高并发下的性能测试指标,测试后果数据精准是底线,必须通过严格的 benchmark 测试
  • 海量并发:重点加强压测能力,占用资源更少,发压效率更高,单机轻松反对万级别并发压力,联合分布式稳固撑持百万级实在并发压力测试
  • 开源生态:充沛与 API 相干工具和规范进行买通,加强数据流通性和二次开发可扩大能力

v1/v2/v3/v4 版本比照概览

可能你还是会感到有些困惑,HttpRunner v4 相比于之前的 v1/v2/v3/hrp 版本,他们的关系和差别到底是什么?

为了让你感观更加清晰,我整顿出了如下表格,具体比照了各个版本间的要害差别点。

版本 v1 v2 v3 HttpRunner+ v4
公布工夫 2018.3.7 2019.1.1 2020.03.10 2021.11.18 2022.5.1
开发语言 Python Python Python Golang Golang + Python
版本号标准(semver)
网络协议 HTTP(S)/1.1 HTTP(S)/1.1 HTTP(S)/1.1 HTTP(S)/1.1 多协定 HTTP(S)/HTTP2/WebSocket/_TCP/RPC_
脚本转换工具 HAR HAR HAR HAR HAR/_Postman/Swagger/Curl_
工程脚⼿架
测试⽤例(集)格局 v1 v2 v2 v2 v2
测试⽤例分层机制 v1 v2 v2 v2 v2
脚本格局类型 YAML/JSON YAML/JSON YAML/JSON/pytest YAML/JSON YAML/JSON/pytest/gotest
脚本格局校验 [jsonschema] TODO
脚本编写语法提醒 pytest 链式调用 gotest 链式调用 gotest 链式调用 + pytest 链式调用
脚本执行引擎 Python unittest Python unittest Python pytest Go 自研 Go 自研 + Python pytest
插件化语言(debugtalk.xx) Python Python Python 多语言(Go/Python) 多语言(Go/Python/_Java/etc._)
参数提取机制 regex + 点分隔符 jmespath + regex + 点分隔符 jmespath jmespath + regex jmespath + regex
skip 机制 TODO
接口测试报告 html 自研(jinja2) html 自研(jinja2) pytest-html/allure html 自研(Go template) html 自研(Go template)+ pytest-html/allure
性能测试引擎 Python Locust Python Locust Python Locust Go Boomer Go Boomer
运行环境依赖 Python 2.7/3.3+ Python 2.7/3.5+ Python 3.7+ pytest 无需依赖 Go 引擎无需依赖 <br/>pytest 引擎依赖 Python 3.7+
网络性能采集
装置部署形式 pip pip pip curl/wget curl/wget

注:v4 中 斜体 代表以后还未反对,但打算会实现。

从下面的表格能够看出,HttpRunner v4 颇有点 金刚葫芦娃 的意思,囊括了之前所有版本的性能,并且减少了很多新个性。

HttpRunner v4 = v2 + v3 + hrp + ...

在应用体验和用例格局兼容性方面,v4 也会与之前的 v2/v3/hrp 做到兼容,因而后续 HttpRunner 的保护工作都将转到 v4 版本,之前的版本将不再独自保护。

v4.0 外围性能介绍

在 v4.0 版本中,HttpRunner 整体实现了从新设计,重点反对了双执行引擎、多网络协议、多编程语言、多测试用处等能力。

这里先只筛选局部进行简略介绍,后续咱们会补充欠缺的用户阐明文档。

双执行引擎

HttpRunner v4.0 可能给很多用户带来的第一直观印象,就是将我的项目语言替换为了 Golang。

这种说法其实是不太精确的,确切地说,HttpRunner v4.0 同时采纳了 Golang/Python 两种编程语言,底层会有两套绝对独立的执行引擎,指标是兼具 Golang 的高性能和 pytest 的丰盛生态。

具体实现方面,HttpRunner v4.0 采纳 Golang 基本上实现了所有的性能,除了用例执行引擎(hrp run)和压测引擎(hrp boom)外,脚手架工具(hrp startproject)、用例生成工具(hrp har2case)、脚本转换工具(hrp convert)等都优先采纳 Golang 进行编写,目标是晋升执行效率(毕竟是 Go)和代码品质(动态语言 & 类型零碎)。而惟一持续采纳 Python 进行编写的则是基于 Python pytest 的接口测试执行引擎(hrp pytest),次要思考是反对 pytest 的丰盛插件生态,并且与 v3 放弃兼容。

不过须要特地阐明的是,应用 HttpRunner v4.0 并不是必须要具备 Go 语言根底。

HttpRunner 的测试用例脚本反对:

  • 文本状态:JSON、YAML
  • 代码状态:pytest 和 go test

并且动静运算逻辑(plugin)反对多种编程语言(详见后文),包含 Python。

因而你齐全能够抉择应用 JSON/YAML 格局编写保护测试用例,插件语言选择 Python,应用形式和体验能够做到基本上和 HttpRunner v2.x 统一。或者你能够抉择 pytest 代码状态的脚本,在应用体验上也能够做到和 v3.x 基本一致。

但如果你是冀望应用 HttpRunner v4.0 做业余的性能测试,那么最好还是抉择应用 golang 编写插件,单机发压性能(QPS)能够达到 2w 以上,这是 Python 插件远远无奈达到的。

多网络协议

HttpRunner v4.0 已不再局限于 HTTP 协定,以后已成长为一个反对多协定可扩大的测试工具。

截至以后,HttpRunner v4 曾经新增反对了 HTTP/2 和 WebSocket 协定,RPC(thrift)协定正在开发中,后续将逐渐反对 TCP/UDP/gRPC 等协定类型。

不过,HttpRunner 会持续放弃该命名。HTTP 作为最宽泛应用的网络协议,能够作为协定的代表,就像 Postman 中的 POST 那样,也是能够讲得通的。

多编程语言

针对动静运算逻辑(plugin)局部,HttpRunner v4.0 不再局限于 Python,而是采纳了 gRPC 的计划。因而实践上,gRPC 反对 10+ 支流编程语言 HttpRunner v4 都能够反对。

以后已反对的插件语言:

  • Go
  • Python
  • Java(打算中,期待奉献)

这部分能力曾经独自抽离出了一个根底组件,有趣味能够详见 httprunner/funplugin。

多测试用处

HttpRunner 在创立之初就以「能力复用」为指标,冀望只需编写保护一套脚本,就能够同时实现接口测试、性能测试、服务可用性监控等能力。

在 v4.0 版本中,HttpRunner 更进一步,将新增反对「网络性能监测」,实现数字体验监测(DEM)的能力。

同时,v4 还对 step 的类型进行了形象,不便进行扩大。

基于该机制,咱们能够扩大反对新的网络协议类型,也能够反对新的测试类型,例如 SQL 操作或 UI 自动化。甚至咱们还能够在一个测试用例中混合调用多种不同的 Step 类型,例如实现 HTTP/RPC/SQL/UI 混合场景。

是不是很有想象力空间?

开源我的项目经营

开源我的项目不仅仅是将代码进行公开,同时还须要建设好用户社区,帮忙并疏导更多的人退出进来。而在这方面 HttpRunner 始终做得都不大好,接下来必须得增强开源社区经营的投入。

从 v4.0 版本开始,HttpRunner 冀望从以下几个方面进行改良。

外围开发团队

截至以后,HttpRunner 曾经有 21 位开发者奉献过代码。尽管看上去还不错,但之前次要的开发保护工作基本上都还是我一个人,这对我的项目的衰弱度是十分不利的。

庆幸的是,在 QuickRunner 我的项目立项之初,咱们团队又投入了 2 位同学到 HttpRunner 的开发工作;同时在字节外部,其它部门另一位同样在重度应用 HttpRunner 的同学也退出了开源共建。

因而,HttpRunner 以后有了 4 位真正意义上的外围开发者:

  • debugtalk:负责我的项目的整体架构和布局;哪里有砖哪里搬
  • xucong053:奉献了多机负载分布式压测能力、Prometheus 性能数据采集能力、参数化数据驱动、html 报告等
  • bbx-winner:奉献了 HTTP2/WebSocket 网络协议、benchmark 数据准确性测试等
  • billduan:重点投入 pytest 引擎局部,奉献了 thrift RPC 协定、集成 SQL 调用等

在这里也十分欢送更多的敌人参加进来,特地是在工作中重度应用 HttpRunner 的敌人,「独行者速,众行者远」。

用户调研问卷

为了更好地收集 HttpRunner 用户反馈,明确需要迭代门路,咱们从往年开始尝试了用户调研问卷的模式。

  • HttpRunner 用户调研问卷 => HttpRunner 首轮用户调研报告(2022.02)
  • HttpRunner 增值服务调研问卷
  • QuickRunner 用户需要调研

通过调研问卷,我收集到了十分多贵重的反馈和倡议,这对 HttpRunner 的倒退起到了十分重要的指引作用。

在此非常感谢大家的积极参与,也心愿大家后续能够通过这个路径给予 HttpRunner 更多的反馈(共性需要会高优实现哦~)。

Issue 治理 & 版本布局

GitHub Issues 是 HttpRunner 的我的项目需要管理工具,也是 HttpRunner 用户和开发者的次要交换渠道。

大家在应用 HttpRunner 的过程遇到问题都能够通过 issue 反馈(倡议先搜下是否有反复问题),咱们通过其它渠道收集到的问题也会汇总到这里。

同时为了更高效地治理 issues,HttpRunner 设置了多个维度的标签(Labels),每个 issue 会采纳 1~N 个标签进行组合治理。具体可浏览 HttpRunner 的 Issue 管理机制。

另一方面,HttpRunner 从 v4.0 开始要做版本布局了。具体模式采纳的是 GitHub 的里程碑(milestone)性能,每个版本会设定为一个里程碑,例如 v4.1、v4.2。而后咱们会把所有的 issue(包含新性能、优化、bugfix 等)布局到具体版本中,并在 GitHub 的 Projects 中进行治理。

如果大家想理解 HttpRunner 后续的版本布局,能够到 Projects 中进行查看。当然啦,需要布局后也会动静进行调整,如果你发现你想要的性能排期比拟靠后,也能够多多进行反馈。还是那句话,共性需要会高优实现的。

用户应用文档

在 HttpRunner 首轮用户调研报告(2022.02)中,用户应用文档相干的吐槽在所有问题中排名首位,远超其它问题。

这个问题确实十分重大,咱们在 v4.0 中必须得改!

以后曾经明确的改良措施有三条。

  • 用户文档对立采纳中文编写,确保清晰易懂。
  • 梳理了一份文档打算,曾经分工到外围开发者,后续会将文档编写安顿到工作排期中。
  • 除了用户应用文档,咱们还会针对大的性能个性通过博客介绍其原理机制,期待跟大家有更多的交换互动。

文档链接:https://httprunner.com/docs/

针对一些技术分享类的文章,也会同步 HttpRunner 微信公众号。

用户交换社区

HttpRunner 的交换路径挺多的,以后重点保护的包含:

  • TesterHome 社区:开设了 HttpRunner 主题板块,这也是 HttpRunner 我的项目的发源地
  • 微信公众号:不定期推送 HttpRunner 重点资讯(搜寻 HttpRunner 进行关注)
  • GitHub Discussions:GitHub 上开设的 discussions 社区板块(布告、想法、答疑、分享)
  • 微信交换群:为了保障交换品质顺便设置了一些门槛,须要认真填写一份调研问卷

如果下面的路径都无奈满足你的需要,你也能够加我集体微信(leolee023),但须要在加好友的时候做下略微具体点的自我介绍(至多蕴含姓名和所在公司,最好是再注明下冀望交换的内容)。

总结

以上便是 HttpRunner v4.0 公布将带来的次要变动。在往年的 MTSC 大会的开源专场,我也会对 HttpRunner v4.0 的设计思路和外围原理进行分享,到时候能够线下当面做更多的交换。

最初再做个小预报,咱们团队基于 HttpRunner 研发的一体化 API 测试工具 QuickRunner 曾经实现了初版迭代,很快就要面向社区凋谢体验了,感兴趣的敌人能够先关注下。

最初的最初,开源不易,要是 HttpRunner 对你有过帮忙,麻烦帮忙给个 ⭐️star⭐️ 激励下吧。

https://github.com/httprunner…

正文完
 0