干货 | Dubbo 接口测试技术,测试开发进阶必备

简介: Dubbo 是阿里巴巴开源的一套 RPC 方案,因为理念很契合微服务,这几年很火,用户里面不凡京东,当当,去哪儿等大公司。

image.png

Dubbo 接口测试为霍格沃兹测试学院特色课程,全网深度领先,想一起系统进阶的同学文末加群交流。

Dubbo 是什么?

Dubbo 是阿里巴巴开源的一套 RPC 方案,因为理念很契合微服务,这几年很火,用户里面不凡京东,当当,去哪儿等大公司。

RPC 场景
image.png

Dubbo 架构
image.png

官网也提供了一个很简单实用的 Demo 来演示 Dubbo 协议的使用,用起来的确很简单强大。

Dubbo demo

首页的例子已经很好了。可参考 http://Dubbo.io/

下面介绍几种常用的 Dubbo 接口测试方法。

基于 telnet 的简单调试接口

任何一个 Dubbo 服务都支持一个简单的 telent 交互。比如

telnet localhost 20880
>ls -l
> ls -l DemoService
> invoke DemoSerivce.sayHello("seveniruby")

这种方式只能用来简单验证接口的可用

传统的基于 XML 配置的 Dubbo 的测试方法

首先创建一个 XML 文件放到 resources 下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:Dubbo="http://code.alibabatech.com/schema/Dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/Dubbo http://code.alibabatech.com/schema/Dubbo/Dubbo.xsd">
    <Dubbo:application name="demo-consumer"/>
    <Dubbo:registry address="Dubbo://127.0.0.1:9090"/>
    <Dubbo:reference id="demoService" interface="com.testerhome.tapi.Dubbo.DemoService"/>
</beans>

通过使用一份 XML 配置文件进行测试

  test("Dubbo use registy xml"){
    val context = new ClassPathXmlApplicationContext("Dubbo/consumer.xml")
    context.start()
    val demoService = context.getBean("demoService").asInstanceOf[DemoService]
    println(demoService.sayHello("seveniruby"))

    val req=new RequestModel()
    req.setName("james")
    req.getChild.setName("lily")
    println(TData.toJson(demoService.reqModel(req)))
  }

基于 API 的 Dubbo 测试方法

其实除了 XML 配置之外,官方也提供了一份直接通过 API 进行配置的方式,这个方式无疑是可编程比较灵活的。

  test("Dubbo use registry"){
    // 当前应用配置
    val application = new ApplicationConfig
    application.setName("yyy")

    // 注意:ReferenceConfig 为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接

    // 引用远程服务
    val reference = new ReferenceConfig[DemoService] // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
    reference.setApplication(application)
    reference.setRegistry(registry); // 多个注册中心可以用 setRegistries()
    reference.setInterface(classOf[DemoService])
    //reference.setUrl("Dubbo://127.0.0.1:20881")
    reference.setTimeout(5000)

    // 和本地 bean 一样使用 DemoService
    val DemoService = reference.get // 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用
    System.out.println(DemoService.sayHello("seveniruby"))

    val req=new RequestModel()
    req.setName("james")
    req.getChild.setName("lily")
    System.out.println(TData.toJson(DemoService.reqModel(req)))
  }

泛化调用

官方原话是:

泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map

表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现。

这种情况适合自己打造接口测试框架使用。以上 2 个方式都需要依赖研发提供的 Dubbo 接口的 jar 包,这无疑会增加项目的负担。

使用泛化可以不依赖任何研发提供的 jar 包,不过缺点也明显,仍然需要 jar 包或者其他的文档去分析 Dubbo 接口的调用参数信息。

例子

 test(" 泛化调用 by provider conf use map"){

    var reference = new ReferenceConfig[GenericService]() // 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存
    reference.setGeneric(true) // 声明为泛化接口
    reference.setApplication(new ApplicationConfig("generic-provider"))
    //reference.setRegistry(registry)
    reference.setInterface("com.testerhome.tapi.Dubbo.DemoService") // 弱类型接口名
    reference.setTimeout(5000)
    reference.setUrl(s"Dubbo://127.0.0.1:20881")

    val genericService = reference.get
    val result = genericService.$invoke("sayHello", Array("java.lang.String"), Array("xxxx".asInstanceOf[AnyRef]))
    log.info(result)

    val childMap= mutable.Map[String, AnyRef]()
    childMap.put("name", "children")
    val map= mutable.Map[String, AnyRef]()
    map.put("name", "aaa")
    map.put("id", "11")
    map.put("child", childMap.asJava)

    val resModel=genericService.$invoke(
      "reqModel",
      Array("com.testerhome.tapi.Dubbo.RequestModel"),
      Array(map.asJava.asInstanceOf[AnyRef]))
    log.info(resModel)
    log.info(TData.toJson(resModel))
  }

虽然看起来还是依赖 jar 包,不过这个依赖就挺小了。如果你技术稍微 “猥琐” 点,就应该可以想到,只需要借助 asm 之类的字节码分析框架即可自动生成接口测试用例模板了。

Tips | Dubbo 测试的技术关注点

Dubbo 支持很多的协议,如果用的是 HTTP 或者 Hessian 协议,他们本身是文本的,可以直接使用 RESTAssured 框架进行接口测试;
Dubbo 的 Registry 保存了 Dubbo 各种服务的注册信息,测试的时候可以直接用 registry,而不是直接连接到提供服务的 provider 上;

更多技术文章分享及测试资料点此获取

相关文章
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
57 4
|
5天前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
2月前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
5天前
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。
|
5天前
|
Web App开发 JSON 测试技术
API测试工具集合:让接口测试更简单高效
在当今软件开发领域,接口测试工具如Postman、Apifox、Swagger等成为确保API正确性、性能和可靠性的关键。Postman全球闻名但高级功能需付费,Apifox则集成了API文档、调试、Mock与自动化测试,简化工作流并提高团队协作效率,特别适合国内用户。Swagger自动生成文档,YApi开源但功能逐渐落后,Insomnia界面简洁却缺乏团队协作支持,Paw仅限Mac系统。综合来看,Apifox是国内用户的理想选择,提供中文界面和免费高效的功能。
|
1月前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
101 11
|
2月前
|
数据采集 前端开发 安全
前端测试技术
前端测试是确保前端应用程序质量和性能的重要环节,涵盖了多种技术和方法
|
2月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
83 3
|
2月前
|
前端开发 JavaScript 测试技术
前端小白逆袭之路:如何快速掌握前端测试技术,确保代码质量无忧!
【10月更文挑战第30天】前端开发技术迭代迅速,新手如何快速掌握前端测试以确保代码质量?本文将介绍前端测试的基础知识,包括单元测试、集成测试和端到端测试,以及常用的测试工具如Jest、Mocha、Cypress等。通过实践和学习,你也能成为前端测试高手。
79 4
|
8月前
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

热门文章

最新文章