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

 

dubbo架构

 

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

dubbo demo

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

基于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之类的字节码分析框架即可自动生成接口测试用例模板了。

dubbo测试的技术关注点

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

接口测试 dubbo 接口测试的更多相关文章

  1. 接口测试 dubbo 接口测试技术

    本文转自测试之家 https://testerhome.com/topics/10481 dubbo是阿里巴巴开源的一套rpc方案,以为理念很契合微服务,这几年很火,用户里面不凡京东,当当,去哪儿等大 ...

  2. 用阿里巴巴官方给Jmeter开发的Dubbo sampler取样器进行dubbo接口测试【图解剖析】

    自:https://blog.csdn.net/cyjs1988/article/details/84258046 [一]Dubbo sampler下载地址: 该插件支持jmeter 3.2及3.2以 ...

  3. 【Jmeter】- 使用 jmeter 进行 dubbo 接口测试

    大家都知道 dubbo 是一个优秀 rpc 框架,它一般(dubbox 除外)通过对外提供 tcp协议的接口进行外部调用.而我们日常使用的测试工具 jmeter 并不支持 dubbo 协议的请求.所以 ...

  4. Jmeter官方插件实现Dubbo接口测试

    目前主流的分布式框架有Dubbo和SpringCloud, SpringCloud是基于Http协议的分布式框架,Dubbo是基于RPC的分布式框架,Jmeter没有内置对Dubbo接口的支持,很难直 ...

  5. 使用dubbo-go搭建dubbo接口测试平台

    背景 http接口测试只需要一个curl命令,但dubbo协议没有这样的现成接口测试工具.通常公司内的dubbo控制台或其他平台会集成一个dubbo接口测试工具. 调用一个dubbo接口,需要知道服务 ...

  6. Jmeter接口测试 1=> 接口测试介绍

    第一节 接口测试概念 什么是接口测试概念:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 测试的重点是要检查数据的交换,传递和控制管理过 ...

  7. jmeter接口测试与接口测试工具

    接口测试与接口测试工具 1,什么是接口? 接口,Application Programming Interface(API) 通俗的讲 就是HTTP请求 2,什么是接口测试? 接口测试测试组件间接口的 ...

  8. dubbo接口测试

    1.下载所需工具eclipse或intellij idea,下载maven,maven中config/settings.xml中要添加公司(测试人员公司)的maven库,不然被测dubbo服务jar包 ...

  9. Jmeter学习之--dubbo接口测试

    背景:公司的h5和APP都需要调用许多非http的服务,需要对服务的性能和自动化测试 工具:IDEA ,maven,Jmeter 参考文档: https://testerhome.com/topics ...

随机推荐

  1. import this: python原则

    >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is ...

  2. JavaScript教程——this 关键字

    简单说,this就是属性或方法“当前”所在的对象. 原文地址:https://wangdoc.com/javascript/oop/this.html

  3. BZOJ5017 [Snoi2017]炸弹[线段树优化建边+scc缩点+DAG上DP/线性递推]

    方法一: 朴素思路:果断建图,每次二分出一个区间然后要向这个区间每个点连有向边,然后一个环的话是可以互相引爆的,缩点之后就是一个DAG,求每个点出发有多少可达点. 然后注意两个问题: 上述建边显然$n ...

  4. 如何实现swipe、tap、longTap等自定义事件

    前言 移动端原生支持touchstart.touchmove.touchend等事件,但是在平常业务中我们经常需要使用swipe.tap.doubleTap.longTap等事件去实现想要的效果,对于 ...

  5. HTML嵌入多媒体对象

    [问题描述]如何在HTML中嵌入pdf.word,音频(如mp3),视频(如mp4),flash呢? [分析] 1 嵌入pdf (1) 利用object <object classid=&quo ...

  6. Python3-元祖

    # Tuple(元组) # 元组(tuple)与列表类似,不同之处在于元组的元素不能修改.元组写在小括号(())里,元素之间用逗号隔开. # 元组中的元素类型也可以不相同 tuple = ('abcd ...

  7. BZOJ 2631 tree / Luogu P1501 [国家集训队]Tree II (LCT,多重标记)

    题意 一棵树,有删边加边,有一条链加/乘一个数,有询问一条链的和 分析 LCT,像线段树一样维护两个标记(再加上翻转标记就是三个),维护size,就行了 CODE #include<bits/s ...

  8. 【线性代数】1-0:向量(Vector)

    title: [线性代数]1-0:向量(Vector) toc: true categories: Mathematic Linear Algebra date: 2017-08-28 10:01:2 ...

  9. KDC添加加密

    零售KDC管理的域为TESTA.COM 华为集群管理的域为hadoop.com (目前测试了hdfs cli,下午在UAT集群测试下distcp) 一.            零售KDC升级支持AES ...

  10. jsp页面,使用Struts2标签,传递和获取Action类里的参数,注意事项。<s:a action><s:iterator><s:param>ognl表达式

    在编写SSH2项目的时候,除了使用<s:form>表单标签向Action类跳转并传递参数之外,很更多时候还需要用到<s:a action="XXX.action" ...