hrun4j
是由乐马技术
推出的开源一站式接口测试解决方案,它不仅仅只是一个 Java 版的 httprunner,现阶段规划解决方案包括四部分:
hrun4j-core
:框架核心,提供完整的运行机制、数据驱动、多种表达式引擎、多种数据检查机制及测试报告生成(已完成)hrun4j-plugin
:Intellij Idea 插件,赋能研发,插件式集成至 IDEA,提供智能补全、快速填充及在线调试运行功能(实现中)hrun4j-platform
: 官方 Web 平台,赋能测试,提供完整的 API 测试生命周期管理(规划中)hrun4j-sync
: 同步中心,增强研发测试协作,采用双向同步机制,支持研发本地接口文档、用例上传或远程用例下载自测(规划中)CLI
和POM
模式集成hrun4j
能力,如以POM
模式集成,可以无缝融入 Spring 生态链Okhttps
,即使是复杂场景(比如上传/下载进度控制),它都能轻松搞定TestNG
实现 YML 或 JSON 格式数据驱动、测试用例组织与执行ReportNG
,生成优雅详细的测试报告正则表达式/Jsonpath/Jmespath/对象提取
,支持丰富的校验方式,比如:startsWith/endsWith/equalTo/not/containsString
等Aviator
和BeanShell
脚本,借助他们即可轻松实现复杂的动态业务逻辑hook
机制瑞士小军刀
,目前支持har2yml|json
、viewhar
、run
、startproject CLI/POM
、swagger2api
、postman2case
I18N
参数即可轻松切换中英文输出工程模块划分如下:
├── hrun4j-api: 提供api接口方便扩展成平台(纳入平台规划)
├── hrun4j-cli: 提供命令行支持,支持用例录制,可快速创建脚手架、测试用例集运行及调试(已完成)
├── hrun4j-core: 工程核心模块,提供完整的运行机制、数据驱动、表达式引擎及测试报告生成(已完成)
├── hrun4j-plugins: 插件式集成至IDEA,提供智能补全、快速填充及在线调试运行功能(开发中)
├── hrun4j-test-demo: 常用基本、核心、特殊案例使用说明(已完成)
├── hrun4j-test-server:内置测试服务,基于springboot开发,工程规范标准(已完成)
提供多种方式集成hrun4j
能力,分别是CLI
、POM
、API
,其中API
可细分为:Idea Plugin
、Platform
,一期主要集中在CLI
、POM
。
CLI
,借助轻量级文本编辑器(Sublime、Editplus)和命令行工具 hrun4j.jar 即可完成用例编写、编排、执行及报告生成。POM
,在 IDEA 下完成用例编写、编排、执行及报告生成,POM 模式本质是以 MAVEN JAR 引入hrun4j
,从而集成其能力。hrun4j
提供多种响应数据提取方式,支持正则表达式/Jsonpath/Jmespath/对象提取
Jsonpath
:可以通过$.对象.属性
获取,对象即为框架内置对象正则表达式
:通过正则获取,值必须以^
开头并以$
结尾对象提取
:通过框架提供的内置对象获取,对象
或者对象.属性
方式获取Jmespath
:和方式三类似,但可以支持更复杂的表达式提取,属Jmespath
专有表达式hrun4j
是通过反射机制构造org.hamcrest.Matchers
对象进行断言代码生成的,因此Matchers
类型所有方法均可以使用,现只支持预期和实际参数断言,方法非常多,列罗常用方法如下:
equalTo
:比较两个对象相同,可缩写成eq
startsWith
:某字符串以某某开始endsWith
:某字符串以某某结束not
:不相等,可缩写成ne
containsString
:某字符串包含某某lessThan
:小于,可缩写成lt
greaterThan
:大于,可缩写成gt
lessThanOrEqualTo
:小于或等于,可缩写le
greaterThanOrEqualTo
:大于或等于,可缩写成ge
更多方法及使用查看org.hamcrest.Matchers
hrun4j提供一套完整的命令工具集,统称为
瑞士小军刀`,小巧而细腻,功能又强大。
后期会扩展更多命令行支持。
内置强大的表达式引擎,支持 Aviator 和 BeanShell 脚本,借助他们即可轻松实现复杂的动态业务逻辑。
关于表达式使用,在实际接口测试过程中有很多的业务场景需要进行动态运算或者业务定制化功能开发。如果框架只支持简单数据报文发送、接收以及结果校验,远远无法解决问题,因此需要引入表达式的支持。hrun4j
支持 Aviator 和 BeanShell 脚本,使用方法非常简单:${Aviator表达式内容|内置方法}
,更多用法参考:更多用法这里
框架响应数据内置对象有: 1. status_code:Integer 类型,用于存储响应码
框架提供多个内置方法,方法引用方式:${方法名 (方法参数)}:
hrun4j
支持中英文切换,只需要一个参数即可轻松切换。
备注:i18n 全称为 internationalization
限于篇幅,该文主要是概览性介绍hrun4j
核心知识,如果想对项目深入了解可访问
如果入群方式已关闭,框架使用上若有疑问,可先加微信【wytest
】(请备注 hrun4j)再入群交流
感谢 DebugTalk(李隆),为行业带来这么优秀的测试框架 HttpRunner。
强烈推荐阅读 《提问的智慧》、《如何向开源社区提问题》 和 《如何有效地报告 Bug》、《如何向开源项目提交无法解答的问题》,更好的问题更容易获得帮助。
已支持 Windows cli 命令支持。
注意:如果出现 java complie null pointer exception,需要配置 java jdk 环境。
接口自动化能否支持多协议接口,多格式的报文混合测试呢?
E:\develop\hrun4japidemo>java -jar hrun4j.jar run --testcase_path apis/get.yml
15:35:01,893 |-INFO in ch.qos.logback.classic.LoggerContext[hrun4j] - Could NOT find resource [logback-test.xml]
15:35:01,893 |-INFO in ch.qos.logback.classic.LoggerContext[hrun4j] - Could NOT find resource [logback.groovy]
15:35:01,893 |-INFO in ch.qos.logback.classic.LoggerContext[hrun4j] - Found resource [logback.xml] at [jar:file:/E:/develop/hrun4japidemo/hrun4j.jar!/logback.xml]
15:35:01,902 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@22f71333 - URL [jar:file:/E:/develop/hrun4japidemo/hrun4j.jar!/logback.xml] is not of type file
15:35:01,930 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
15:35:01,934 |-INFO in ch.qos.logback.classic.joran.action.ContextNameAction - Setting logger context name as [hrun4j]
15:35:01,935 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
15:35:01,936 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
15:35:01,969 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
15:35:01,969 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE-WITH-COLOR]
15:35:01,970 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
15:35:01,972 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE]
15:35:01,979 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@328638398 - No compression will be used
15:35:01,980 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@328638398 - Will use the pattern logs/hrun4j.%d.%i.log for the active file
15:35:01,981 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6aaa5eb0 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/hrun4j.%d.%i.log'.
15:35:01,981 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6aaa5eb0 - Roll-over at midnight.
15:35:01,983 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6aaa5eb0 - Setting initial period to Mon Jul 12 15:35:01 CST 2021
15:35:01,983 |-WARN in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6aaa5eb0 - SizeAndTimeBasedFNATP is deprecated. Use SizeAndTimeBasedRollingPolicy instead
15:35:01,983 |-WARN in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6aaa5eb0 - For more information see http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy
15:35:01,984 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
15:35:01,985 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - Active log file name: logs/hrun4j.2021-07-12.0.log
15:35:01,985 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - File property is set to [null]
15:35:01,985 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
15:35:01,985 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE-WITH-COLOR] to Logger[ROOT]
15:35:01,986 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE] to Logger[ROOT]
15:35:01,986 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.example.logbackdemo.IndexAction] to INFO
15:35:01,986 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.example.logbackdemo.IndexAction] to false
15:35:01,986 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[com.example.logbackdemo.IndexAction]
15:35:01,986 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
15:35:01,986 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@3498ed - Registering current configuration as safe fallback point
?[33m2021-07-12 15:35:01.994?[0;39m [main] ?[34mINFO ?[0;39m ?[32mvip.lematech.hrun4j.helper.LogHelper?[0;39m - ?[34mRun mode: CLI?[0;39m
?[33m2021-07-12 15:35:02.003?[0;39m [main] ?[34mINFO ?[0;39m ?[32mvip.lematech.hrun4j.helper.LogHelper?[0;39m - ?[34mThe workspace path:E:\develop\hrun4japidemo?[0;39m
?[33m2021-07-12 15:35:02.005?[0;39m [main] ?[31mWARN ?[0;39m ?[32mvip.lematech.hrun4j.helper.LogHelper?[0;39m - ?[31mThe .env file E:\develop\hrun4japidemo.env does not exist?[0;39m
?[33m2021-07-12 15:35:02.010?[0;39m [main] ?[1;31mERROR?[0;39m ?[32mvip.lematech.hrun4j.helper.LogHelper?[0;39m - ?[1;31mThe test case file E:\develop\hrun4japidemo\apis\get.yml does n
ot exist?[0;39m
?[33m2021-07-12 15:35:02.010?[0;39m [main] ?[1;31mERROR?[0;39m ?[32mvip.lematech.hrun4j.helper.LogHelper?[0;39m - ?[1;31mThe test case file E:\develop\hrun4japidemo\apis\get.yml does n
ot exist?[0;39m
Exception in thread "main" vip.lematech.hrun4j.common.DefinedException
at vip.lematech.hrun4j.cli.commands.Run.execute(Run.java:102)
at vip.lematech.hrun4j.Hrun4j.execute(Hrun4j.java:77)
at vip.lematech.hrun4j.Hrun4j.main(Hrun4j.java:90)
看到官网https://www.lematech.vip/docs/react/faq-cn的常见问题举例了这个问题,但是没有依然没有解决这个报错,等待您的回复
POM 模式下载资源路径下找不到用例文件 #
异常报错信息:The file /testcases/getToken.yml was not found under the resources
解决方案: 1. 检查包名是否配置的包名一致 2. 检查 testcases 资源和测试代码路径是否一致 3. 检查文件名是否符合 Java 方法命名规范 4. 检查方法名和文件名是否一致
有个问题向您请教 :
1 windows 设备下载了 hrun4j.jar
2 用脚手架命令 java -jar hrun4j.jar startproject CLI_PROJECT 快速生成了项目
3 cd 进入项目
4 将 hrun4.jar 复制进项目根路径
以上步骤都执行成功,然后执行 命令 java -jar hrun4j.jar run --testcase_path apis/get.yml
提示错误信息截图如下: