基于Spring开发的DUBBO服务接口测试
基于Spring开发的DUBBO服务接口测试
知识共享主要内容:
1、 Dubbo相关概念和架构,以及dubbo服务程序开发步骤。
2、 基于Spring开发框架的dubbo服务接口测试相关配置。
3、 spring test+junit和spring test+TestNG两种测试框架脚本编写方法。
一、 DUBBO与DUBBO架构
1、 什么是dubbo?DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
2、 DUBBO架构:
二、 Dubbo服务程序开发过程(服务提供者,服务消费者,配置文件)
- 服务提供者:
1) 定义服务接口
2) 定义接口实现类
3) Spring配置声明暴露服务:
4) 加载Spring配置
- 服务消费者:
5) Spring配置引用远程服务
6) 加载Spring配置,并调用远程服务
u ClassPathXmlApplicationContext加载配置,然后用getBean方法获取远程代理。
u 用IOC注入:测试脚本是用这种方式的。
三、 Dubbo服务接口测试环境准备
1、 POM.xml引入对应service应用jar依赖。
比如:
dependency>
<groupId>com.XXXX.basisdata</groupId>
<artifactId>basisdata-bankbill-common-facade</artifactId>
<version>1.1.0</version>
</dependency>
2、 Dubbo服务spring配置
u 由于测试过程是远程调用接口的过程,所以只需要进行消费方spring配置。
u 由于阿里云dubbo应用的测试环境属于外网,本地机器需将请求通过公网机器的端口转发給测试环境,需要在公网IPTable配置映射。
u 没有经过注册中心,所以不用配置注册中心。
Spring-dubbo配置文件只需对每个service如下配置:
<dubbo:reference interface="com.xxx.xxx.xxx.service.BillDetailService" id="billDetailService" url="dubbo://121.43.177.8:20100" timeout="10000"/>
然后在spring-context.xml加入引入资源配置即可。
<import resource="spring-secret.xml" />
四、 脚本设计结构:
- 创建测试类公共父类,继承AbstractTestNGSpringContextTests或者AbstractJUnit4SpringContextTests。
- 创建测试类,继承父类,编写相应代码。
五、 脚本两种基本编写方法:
1、 继承AbstractJUnit4SpringContextTests方法。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring-context.xml"})
@Configuration
public class BaseJunit4Test extends AbstractJUnit4SpringContextTests {
}
2、 继承AbstractTestNGSpringContextTests方法。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring-context.xml"})
@Configuration
public class BaseTestNGTest extends AbstractTestNGSpringContextTests {
}
测试类继承BaseTestNGTest即可。
六、 数据驱动两种基本编写方法:
1、 基于Junit数据驱动。
u 父类配置:
- @RunWith(Parameterized.class)
@ContextConfiguration(locations = {"classpath:/spring-context.xml"})
@Configuration
public class BaseJunit4Test extends AbstractJUnit4SpringContextTests {
protected TestContextManager
testContextManager;
@Before
public void setUpContext() throws
Exception {
this.testContextManager = new
TestContextManager(getClass());
this.testContextManager.prepareTestInstance(this);
}
}
u 接口测试类需编写一个构造类和一个由@Parameterized.Parameters参数数据方法
@Parameterized.Parameters
public static Collection<Integer[]> getTestParameters(){
//
// List<Integer[]> list = new ArrayList<Integer[]>();
// list.add(new Integer[]{2000998248}); //expected,valueOne,valueTwo
// list.add(new Integer[]{2000020021});
// list.add(new Integer[]{2001999335});
// String st=list.toString();
// System.out.println("list值:" + st);
// return list;
// } List<Integer[]> list = new ArrayList<Integer[]>(); list =Arrays.asList(new Integer[][]{{2000998248},{2000020021},{2001999335}});
return list;
}
- 构造方法:
- public TestSelectListByUserId2(Integer userid){
this.testUser = userid;
}
2、 基于TESTNG数据驱动。
u 父类配置:
@ContextConfiguration(locations = {"classpath:/spring-context.xml"})
@Configuration
public class BaseTestNGTest extends AbstractTestNGSpringContextTests{
}
u 测试接口类需加一个由@DataProvider(name = "集合标识")注解的数据收集的方法,并将@Test(dataProvider="集合标识")給需要用参数的测试方法。
数据收集方法:
@DataProvider(name = "testdata")
public Object[][] dataprovide()throws IOException{
System.out.println("dataprovide方法执行");
// return new Object[][]{{2000020013,2},{2001000138,0},{2001000139,2}};
Object[][] testData =ExcelHandle.readXlsx(excel, "工作表2");
return testData;
}
u 测试方法:
@Test(dataProvider="testdata")
public void test_case_1(HashMap<String, String> map) throws Exception {
operatorUserId=Integer.valueOf(map.get("userId"));
exceptedvalue =Integer.valueOf(map.get("excepted"));
//++++++++++++++实际值+++++++++++++
Integer actual_value =
billService.getUserEmailNameCount(operatorUserId); //预期值
Integer excepted_value =get_excepted_value(operatorUserId);
//++++++++++++++验证+++++++++++++
Assert.assertEquals(actual_value,exceptedvalue);
}
基于Spring开发的DUBBO服务接口测试的更多相关文章
- 基于SpringBoot开发一个Restful服务,实现增删改查功能
前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...
- 基于Spring Cloud的微服务入门教程
(本教程的原地址发布在本人的简书上:http://www.jianshu.com/p/947d57d042e7,若各位看官有什么问题或不同看法请在这里或简书留言,谢谢!) 本人也是前段时间才开始接触S ...
- 干货|基于 Spring Cloud 的微服务落地
转自 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的 ...
- 基于Spring Cloud的微服务落地
微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的微服务 ...
- 基于 Spring Cloud 的微服务架构实践指南(下)
show me the code and talk to me,做的出来更要说的明白 本文源码,请点击learnSpringCloud 我是布尔bl,你的支持是我分享的动力! 一.引入 上回 基于 S ...
- 基于 Spring Cloud 的微服务架构实践指南(上)
show me the code and talk to me,做的出来更要说的明白 GitHub 项目learnSpringCloud同步收录 我是布尔bl,你的支持是我分享的动力! 一. 引入 上 ...
- Spring事务引发dubbo服务注册问题
文章清单 1. 问题 2. 查找bug过程 3. 解决方案 使用spring boot+dubbo写项目,一个服务,之前是正常的,后来调用方出现空指针异常,第一反应提供方出了问题. 1. 看控制台,服 ...
- 基于Spring开发的一个BIO-RPC框架(对新人很友好)
PART1:先来整体看下项目的构成 其中bio-rpc-core就是所谓的rpc框架 bio-rpc-example-client即所谓的服务调用方(你的项目中想要调用服务的地方) bio-rpc-e ...
- 基于Spring Boot的微服务搭建
环境: 项目结构: 关键配置 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project ...
随机推荐
- Centos7/RHEL 7 配置静态路由
如图: 业务地址:192.168.10.0/24 192.168.20.0/24管理地址:172.168.10.0/24 172.168.20.0/24 需求:每台主机配置两张网卡,分别连 ...
- Chrome崩溃卡死
Chrome崩溃卡死主要是Flash崩溃导致,解决办法:1,chrome://plugins,停用Chrome自带的Flash插件:2,停用GPU加速.chrome://flags,停用对所有网页执行 ...
- springCloud Zuul网关
1.springboot 仅2.0.x 支持,在此选择 2.0.7 2.新建Module eureka-zuul-client 3.导入依赖 <?xml version="1.0&qu ...
- #6034. 「雅礼集训 2017 Day2」线段游戏 李超树
#6034. 「雅礼集训 2017 Day2」线段游戏 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统 ...
- Nodejs微信开发使用wechat-api回复多条消息
在上一往篇文章<Nodejs微信开发>中,微信后台能够正常的接收到客户端的消息,并能够简单的回复一条消息至客户端. 但我的目录是将微信与Bot Framework进行关联,那么肯定就有一些 ...
- css “裁剪”图片(显示图片的一部分)
背景:朋友有一个需求,就是列表页显示的图片要做裁剪,不然不按比例缩小图片看起来就变形了.本来想好的解决办法是用PHP来生成缩略图,然而试了好几个开源缩略图类都没有一个满意的,突然想到为什么不直接用CS ...
- Linux命令之quota
quota [-guqvswim] [-l | [-Q | -A] ] [-F quotaformat] quota [-qvswim] [-l | [-Q | -A]] [-F quotaforma ...
- 25、Django实战第25天:讲师详情页
1.复制teacher-detail.html到templates目录下 2.编辑teacher-detail.html,继承base.html 3.编辑organization.view.py cl ...
- centos 7下查找大文件、大目录和常见文件查找操作
根据园子 潇湘隐者的文章 <Linux如何查找大文件或目录总结>结合实际运维需要整理出常用命令 目标文件和目录查找主要使用 find 命令 结合 xargs (给命令传递参数的一个过滤器, ...
- 【单调队列】【动态规划】bzoj3831 [Poi2014]Little Bird
f(i)=min{f(j)+(D(j)<=D(i))} (max(1,i-k)<=j<=i) 有两个变量,很难用单调队列,但是(引用): 如果fi<fj,i一定比j优秀.因为如 ...