Giter Site home page Giter Site logo

hrun4j's Introduction

关于hrun4j

TesterHome

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语言特性,把面向对象、继承、设计模式及反射机制发挥淋漓尽致

支持环境

支持Mac/Windows/Linux操作系统,只需要用户配置JDKJRE环境变量即可。

安装

参考快速上手

链接

乐马技术

联系方式

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

友情链接

生态

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

鸣谢

  1. 感谢DebugTalk(李隆),为行业带来这么优秀的测试框架HttpRunner,官方说明文档多处引用其官网

问答

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

Let's fund issues in this repository

赞助

hrun4j 是遵循 Apache 协议的开源项目。为了项目能够更好的持续的发展,我们期望获得更多的支持者,你可以通过如下任何一种方式支持我们:

  1. 支付宝或微信

项目划分

框架地址:https://github.com/lematechvip/hrun4j

工程目录如下:

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

更多信息

欢迎关注乐马技术微信公众号,第一时间获得最新资讯

-w195

hrun4j's People

Contributors

chenfanghang avatar lematechvip avatar troyzhxu avatar yaming116 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hrun4j's Issues

当请求 Header 中引用 Long 类型变量时,出现类型转换错误

测试用例 login.xml 如下:

config:
  name: 登录测试用例
  base_url: https://reqres.in
teststeps:
  - name: 获取Token信息
    base_url: https://reqres.in
    variables:
      password: "${2+3}"
    request:
      url: /api/login
      method: POST
      headers:
        contentType: "application/json"
        password: "${password}"
      json:
        email: "[email protected]"
        password: "${password}"
    validate:
      - equalTo: [status_code,200]
    extract:
      token: body.token

报错信息:

...
2022-03-21 21:28:33.329 [main] INFO  vip.lematech.hrun4j.helper.LogHelper - 当前步骤:获取Token信息 
2022-03-21 21:32:45.730 [main] INFO  vip.lematech.hrun4j.helper.LogHelper - 请求地址:https://reqres.in/api/login 
2022-03-21 21:32:45.732 [main] INFO  vip.lematech.hrun4j.helper.LogHelper - 请求类型:POST 
2022-03-21 21:32:47.088 [main] INFO  vip.lematech.hrun4j.helper.LogHelper - 请求头:{password=5, contentType=application/json} 
2022-03-21 21:32:55.875 [main] ERROR vip.lematech.hrun4j.helper.LogHelper - Unknown exception occurred in test case  execution. Exception information:java.lang.Long cannot be cast to java.lang.String 



vip.lematech.hrun4j.common.DefinedException
	at vip.lematech.hrun4j.core.runner.TestCaseRunner.execute(TestCaseRunner.java:122)
	at com.liyun.qa.edu.hrun4j.testcases.GetStartedTest.login(GetStartedTest.java:24)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...

初步分析:headers 字段 Value 存入时使用的是 Object 类型,取用时使用的是 String 类型,存在类型转换风险。

  1. RequestEntity 类中 headers 字段声明为如下类型: private Map<String, Object> headers;,其中 Value 为 Object 类型。
  2. ExpProcessor#dynHandleContainsExpObject(T t) 方法在解析 Header Value 中的表达式时赋值代码如下:
    public <T> T dynHandleContainsExpObject(T t) {
              ...
                Object handledValue = handleStringExp(value);
               // headers 字段存入时,Value 为 Object 类型,本案例中为 Long 类型
                result.put(key, handledValue);
              ...
    }
  1. OkHttpsHelper#initRequestParameter 中取值代码逻辑如下:
        if (MapUtil.isNotEmpty(headers)) {
            LogHelper.info(String.format(I18NFactory.getLocaleMessage("request.header"), headers));
            if (headers.containsKey(Constant.HEADER_COOKIE)) {
                LogHelper.info(String.format(I18NFactory.getLocaleMessage("request.cookie"), LittleHelper.emptyIfNull(requestEntity.getCookies())));
            }
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                String key = entry.getKey();
                //这里取值时存在类型转换风险,本案例中 entry.getValue() 返回的是 Long 类型
                String value = entry.getValue();
                headers.put(key, getValueEncoded(value));
            }
            syncHttpTask.addHeader(headers);
        }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.