接口测试 dubbo 接口测试技术
本文转自测试之家 https://testerhome.com/topics/10481
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 接口测试技术的更多相关文章
- 接口测试 dubbo 接口测试
dubbo是阿里巴巴开源的一套rpc方案,以为理念很契合微服务,这几年很火,用户里面不凡京东,当当,去哪儿等大公司.rpc场景 dubbo架构 官网也提供了一个很简单实用的demo来演示dub ...
- 使用dubbo-go搭建dubbo接口测试平台
背景 http接口测试只需要一个curl命令,但dubbo协议没有这样的现成接口测试工具.通常公司内的dubbo控制台或其他平台会集成一个dubbo接口测试工具. 调用一个dubbo接口,需要知道服务 ...
- 用阿里巴巴官方给Jmeter开发的Dubbo sampler取样器进行dubbo接口测试【图解剖析】
自:https://blog.csdn.net/cyjs1988/article/details/84258046 [一]Dubbo sampler下载地址: 该插件支持jmeter 3.2及3.2以 ...
- 【Jmeter】- 使用 jmeter 进行 dubbo 接口测试
大家都知道 dubbo 是一个优秀 rpc 框架,它一般(dubbox 除外)通过对外提供 tcp协议的接口进行外部调用.而我们日常使用的测试工具 jmeter 并不支持 dubbo 协议的请求.所以 ...
- Jmeter官方插件实现Dubbo接口测试
目前主流的分布式框架有Dubbo和SpringCloud, SpringCloud是基于Http协议的分布式框架,Dubbo是基于RPC的分布式框架,Jmeter没有内置对Dubbo接口的支持,很难直 ...
- Jmeter接口测试 1=> 接口测试介绍
第一节 接口测试概念 什么是接口测试概念:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 测试的重点是要检查数据的交换,传递和控制管理过 ...
- jmeter接口测试与接口测试工具
接口测试与接口测试工具 1,什么是接口? 接口,Application Programming Interface(API) 通俗的讲 就是HTTP请求 2,什么是接口测试? 接口测试测试组件间接口的 ...
- dubbo接口测试
1.下载所需工具eclipse或intellij idea,下载maven,maven中config/settings.xml中要添加公司(测试人员公司)的maven库,不然被测dubbo服务jar包 ...
- Jmeter学习之--dubbo接口测试
背景:公司的h5和APP都需要调用许多非http的服务,需要对服务的性能和自动化测试 工具:IDEA ,maven,Jmeter 参考文档: https://testerhome.com/topics ...
随机推荐
- 【链接】在线压缩JS文件
在线压缩JS文件: http://yui.2clics.net/ https://refresh-sf.com/
- CSP2019初赛游记
没想到居然ak了,就纪念一下吧. 这次的联赛,只能说是高三生活的一缕杂音了吧. 这次,我的心态可以说是非常平稳了.毕竟不再会有竞赛生涯的压力,也不会有患得患失的惶恐.不过也许我开考前的放声唱歌惊扰了一 ...
- Win10 专业版 Hyper-V 主机计算服务无法启动
Windows 10升级1809版本后,发现Hyper-V不能用了,管理器里是一片空白,看服务Hyper-V 主机计算服务没有启动,手动启动的话失败,报错,代码1053. 自己尝试修复,也百度了很久, ...
- SACD-ISO音频镜像播放方式
SACD-ISO 音频文件不需要解压也不需要挂载光盘,可以直拖入播放器播放. 播放器下载 foobar2000https://www.foobar2000.org/download 解码插件下载 Su ...
- 长乐国庆集训Day2
T1 连珠风暴 题目 [题目描述] 给定M种颜色的珠子,每种颜色珠子的个数均不限,将这些珠子做成长度为N的项链. 问能做成多少种不重复的项链.两条项链相同,当且仅当两条项链通过旋转或是翻转后能重合在一 ...
- 通过excel表格分析学生成绩
题目要求: 分析文件’课程成绩.xlsx’,至少要完成内容:分析1)每年不同班级平均成绩情况.2)不同年份总体平均成绩情况.3)不同性别学生成绩情况,并分别用合适的图表展示出三个内容的分析结果. 废话 ...
- Python pip版本升级
pip版本升级命令: python -m pip install --upgrade pip 如果报错代码如下: (venv) C:\Users\ssdy\PycharmProjects\untitl ...
- python 打包前三天日志
日志格式 app-2019-07-24.log app-2019-07-24.1.log 该脚本适合一天之内有多个日志文件 # /usr/bin/python #-*- coding: utf-8 - ...
- JAVA调用系统命令:python、shell等
实际项目开发场景中,可能会用到java项目调用系统命令的需求,如调用python或者shell脚本 可以参考如下例子,例子来源于ambari源码: \ambari\ambari-server\src\ ...
- tf.nn.softmax_cross_entropy_with_logits()函数的使用方法
import tensorflow as tf labels = [[0.2,0.3,0.5], [0.1,0.6,0.3]]logits = [[2,0.5,1], [0.1,1,3]] a=tf. ...