hrun4j 【开源 hrun4j】致敬 DebugTalk,又一接口测试利器发布,网友:真香!

乐马技术 · 2021年07月11日 · 最后由 乐马技术 回复于 2021年08月20日 · 6343 次阅读
本帖已被设为精华帖!

前言:DebugTalk(李隆)开源的httprunner因其优秀的设计理念、良好的测试设计的高度抽象以及 DebugTalk 热爱技术、开源、分享,让httprunner深受大家欢迎,在很多公司已经落地。
入职LX公司,公司内部已有一套基于 Python 版httprunner开发的接口测试平台,因今年测开技术统一使用 JAVA 语言开发且平台往All in one的节奏,所以就顺手写了一个 JAVA 版的httprunner,简称成:hrun4j。个人在接口测试领域有一定探索,在设计hrun4j加入了自己很多独到的见解同时结合 JAVA 语言特性进行开发设计,因想更多的同学能参与到开源共建,所以把TesterHome作为开源首发宣传地,希望能有更多能参与到项目开发中。

✨关于 hrun4j

hrun4j是由乐马技术推出的开源一站式接口测试解决方案,它不仅仅只是一个 Java 版的 httprunner,现阶段规划解决方案包括四部分:

  1. hrun4j-core:框架核心,提供完整的运行机制、数据驱动、多种表达式引擎、多种数据检查机制及测试报告生成(已完成)
  2. hrun4j-plugin:Intellij Idea 插件,赋能研发,插件式集成至 IDEA,提供智能补全、快速填充及在线调试运行功能(实现中)
  3. hrun4j-platform: 官方 Web 平台,赋能测试,提供完整的 API 测试生命周期管理(规划中)
  4. hrun4j-sync: 同步中心,增强研发测试协作,采用双向同步机制,支持研发本地接口文档、用例上传或远程用例下载自测(规划中)

✨ 核心特性

  1. 支持以CLIPOM模式集成hrun4j能力,如以POM模式集成,可以无缝融入 Spring 生态链
  2. 集成纯粹且优雅的Okhttps,即使是复杂场景(比如上传/下载进度控制),它都能轻松搞定
  3. 借助TestNG实现 YML 或 JSON 格式数据驱动、测试用例组织与执行
  4. 借助ReportNG,生成优雅详细的测试报告
  5. 支持多种数据提取方式,比如:正则表达式/Jsonpath/Jmespath/对象提取,支持丰富的校验方式,比如:startsWith/endsWith/equalTo/not/containsString
  6. 内置强大的表达式引擎,支持AviatorBeanShell脚本,借助他们即可轻松实现复杂的动态业务逻辑
  7. 测试前后支持完善的hook机制
  8. 提供强大且贴心 CLI 工具集,即瑞士小军刀,目前支持har2yml|jsonviewharrunstartproject CLI/POMswagger2apipostman2case
  9. 插件式集成至 IDEA,提供智能补全、快速填充及在线调试运行功能(实现中)
  10. 内置国际化支持,配置I18N参数即可轻松切换中英文输出
  11. 框架核心实现充分利用 JAVA 语言特性,把面向对象、继承、设计模式及反射机制发挥淋漓尽致

关于项目

开源地址

工程划分

工程模块划分如下:

├── hrun4j-api: 提供api接口方便扩展成平台(纳入平台规划)
├── hrun4j-cli: 提供命令行支持,支持用例录制,可快速创建脚手架、测试用例集运行及调试(已完成)
├── hrun4j-core: 工程核心模块,提供完整的运行机制、数据驱动、表达式引擎及测试报告生成(已完成)
├── hrun4j-plugins: 插件式集成至IDEA,提供智能补全、快速填充及在线调试运行功能(开发中)
├── hrun4j-test-demo: 常用基本、核心、特殊案例使用说明(已完成)
├── hrun4j-test-server:内置测试服务,基于springboot开发,工程规范标准(已完成)

框架秀点

提供多种方式集成 hrun4j 能力

提供多种方式集成hrun4j能力,分别是CLIPOMAPI,其中API可细分为:Idea PluginPlatform,一期主要集中在CLIPOM

  1. Command Line 即为命令行模式,简称为CLI,借助轻量级文本编辑器(Sublime、Editplus)和命令行工具 hrun4j.jar 即可完成用例编写、编排、执行及报告生成。
  2. Maven POM Reference 即为 POM 模式,简称为POM,在 IDEA 下完成用例编写、编排、执行及报告生成,POM 模式本质是以 MAVEN JAR 引入hrun4j,从而集成其能力。

灵活且强大的数据提取机制

hrun4j提供多种响应数据提取方式,支持正则表达式/Jsonpath/Jmespath/对象提取

  1. Jsonpath:可以通过$.对象.属性获取,对象即为框架内置对象
  2. 正则表达式:通过正则获取,值必须以^开头并以$结尾
  3. 对象提取:通过框架提供的内置对象获取,对象或者对象.属性方式获取
  4. Jmespath:和方式三类似,但可以支持更复杂的表达式提取,属Jmespath专有表达式

完善的校验选择器

hrun4j是通过反射机制构造org.hamcrest.Matchers对象进行断言代码生成的,因此Matchers类型所有方法均可以使用,现只支持预期和实际参数断言,方法非常多,列罗常用方法如下:

  1. equalTo:比较两个对象相同,可缩写成eq
  2. startsWith:某字符串以某某开始
  3. endsWith:某字符串以某某结束
  4. not:不相等,可缩写成ne
  5. containsString:某字符串包含某某
  6. lessThan:小于,可缩写成lt
  7. greaterThan:大于,可缩写成gt
  8. lessThanOrEqualTo:小于或等于,可缩写le
  9. greaterThanOrEqualTo:大于或等于,可缩写成ge

更多方法及使用查看org.hamcrest.Matchers

小巧而细腻的命令行工具集

hrun4j提供一套完整的命令工具集,统称为瑞士小军刀`,小巧而细腻,功能又强大。

-w910

后期会扩展更多命令行支持。

内置强大的表达式引擎

内置强大的表达式引擎,支持 Aviator 和 BeanShell 脚本,借助他们即可轻松实现复杂的动态业务逻辑。

  1. Aviator 是一门高性能、轻量级寄宿于 JVM 之上的脚本语言,非常轻量级、好使,支持数字、字符串、正则表达式、布尔值、正则表达式等基本类型,完整支持所有 Java 运算符及优先级等,更多用法这里
  2. BeanShell is dynamically interpreted Java, plus a scripting language and flexible environment all rolled into one clean package,更多用法这里

关于表达式使用,在实际接口测试过程中有很多的业务场景需要进行动态运算或者业务定制化功能开发。如果框架只支持简单数据报文发送、接收以及结果校验,远远无法解决问题,因此需要引入表达式的支持。hrun4j支持 Aviator 和 BeanShell 脚本,使用方法非常简单:${Aviator表达式内容|内置方法},更多用法参考:更多用法这里

丰富的内置属性

内置对象

框架响应数据内置对象有: 1. status_code:Integer 类型,用于存储响应码

  1. headers:Map 类型,用于存储响应头信息
  2. time:Double 类型,用于存储响应时间
  3. body:对象类型,用于存储响应体信息
  4. cookies:Map 类型,用于存储 cookie 信息信息
  5. contentLength:Long 类型,用于存储响应长度

内置方法

框架提供多个内置方法,方法引用方式:${方法名 (方法参数)}:

  1. helloWorld:用于输出 hello,hrun4j
  2. ENV:用于提取.env 文件中某个变量值
  3. BSH:用于执行指定 BSH 脚本并完成赋值的
  4. P:用于读取指定目录下的数据文件

贴心国际化支持

hrun4j支持中英文切换,只需要一个参数即可轻松切换。

  1. CLI 模式下,其中国际化支持可通过 i18n 设置,如果想使用英文,运行时加入--i18n=us 参数即可
  2. POM 模式下设置中英文非常简单,在初始化运行配置时,通过代码设置 i18n 方法参数即可

备注:i18n 全称为 internationalization

使用文档

限于篇幅,该文主要是概览性介绍hrun4j核心知识,如果想对项目深入了解可访问

乐马技术

参与开源共建

-w376
如果入群方式已关闭,框架使用上若有疑问,可先加微信【wytest】(请备注 地区+公司+称呼)再入群交流

鸣谢

感谢 DebugTalk(李隆),为行业带来这么优秀的测试框架 HttpRunner。

问答

强烈推荐阅读 《提问的智慧》《如何向开源社区提问题》《如何有效地报告 Bug》《如何向开源项目提交无法解答的问题》,更好的问题更容易获得帮助。

Let's fund issues in this repository

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 22 条回复 时间 点赞
恒温 将本帖设为了精华贴 07月11日 23:43

厉害厉害,给个小 star

官网炸了?

我就欢迎这种平台,乐见百花齐放

个人觉得还是起个好听点的名字吧!不喜勿喷

666,佩服佩服
不过有点小建议,代码里太多这种了:

if (zzz) {
  do many things;
}
return xxx;

考虑一下这样写不是少很多三角缩进吗

if (!zzz) {
  return xxx;
}
do many things;

槽神 回复

槽神好,你名字及头像很棒!
你看得是 Cli 模块吗???cli 模式还蛮多的,二期会优化滴

😂稍微绕口了,主要是一期模仿 httprunner 的,后面如果更新很大,会考虑换了名字。

干饭狂人 回复

欢迎参与共建

itest work 回复

牛哥.v578

乐马技术 回复

看的是 core,只是个建议,算不得什么问题

乐信自动化之星,大佬威武,期待再出神作

尹全旺 回复

……
旺仔低调呀。。。

乐马技术 回复

替大家提个建议,大方点,服务器配置升级下,这也太卡了,这点小钱大佬都舍不得嘛😁

你说的 idea 插件, 我基于已有 httprunner 实现了:
https://plugins.jetbrains.com/plugin/15821-httprunner-editor
😂

matt gong 回复

优秀啊,可以借鉴下,可以一起搞点事啊

乐马技术 回复

可以可以

给何总点赞 向何总看齐

matt gong 我们是如何玩转 httprunner 的 中提及了此贴 07月17日 09:53

大佬,注释来点儿中文啊

judi 回复

刚开始有些中文,强迫症犯了,直接全全英文了😂

尹全旺 回复

httprunnerManager 是你写的吧?

从文档看的出来,还是蛮有追求的,至少不是那种糊屎的 kpi 项目

干饭狂人 回复

谢谢赞誉,框架使用文档同步到官网了:https://www.lematech.vip/

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