基于Spring开发的DUBBO服务接口测试

             基于Spring开发的DUBBO服务接口测试

 

知识共享主要内容:

1、 Dubbo相关概念和架构,以及dubbo服务程序开发步骤。

2、 基于Spring开发框架的dubbo服务接口测试相关配置。

3、 spring test+junit和spring test+TestNG两种测试框架脚本编写方法。

 

一、        DUBBODUBBO架构

1、          什么是dubbo?DUBBO是一个分布式服框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

2、          DUBBO架构:

      

二、        Dubbo程序发过(提供者,服者,配置文件)

  1. 服务提供者:

1)       定义服务接口

2)       定义接口实现类

3)       Spring配置声明暴露服务:

    

4)       加载Spring配置

     

  1. 服务消费者:

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" /> 
 

四、        脚本设计结构

  1. 创建测试类公共父类,继承AbstractTestNGSpringContextTests或者AbstractJUnit4SpringContextTests。
  2. 创建测试类,继承父类,编写相应代码。

       

五、        脚本两种基本编写方法:

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);
}

 

转载于:https://www.cnblogs.com/ceshi2016/p/6527210.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ioctl之FIONREAD

在学习ioctl 时常常跟 read, write 混淆。其实 ioctl 是用来设置硬件控制寄存器&#xff0c;或者读取硬件状态寄存器的数值之类的。 而read,write 是把数据丢入缓冲区&#xff0c;硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区。 ioctl(keyFd, FIONREAD, &a…

电感基础与选型介绍

电感是一种常见的被动元件&#xff0c;常用在LC振荡电路、中低频的滤波电路&#xff0c;DCDC能量转换电路中&#xff0c;其应用频率一般不超过50MHz。 1.电感的主要作用 通直流&#xff0c;阻交流阻交流变化&#xff0c;保持电流稳定----楞次定律滤波 2.电感的主要分类 3.电…

[题解]Codeforces Round #519 - B. Lost Array

【题目】 B. Lost Array 【描述】 Bajtek有一个数组x[0],x[1],...,x[k-1]但被搞丢了&#xff0c;但他知道另一个n1长的数组a&#xff0c;有a[0]0&#xff0c;对i1,2,...,n。由此可以找到数组x[0],x[1],...,x[k-1]的一些可能情况&#xff0c;即满足这个关系的数组x[0],x[1],...,…

Python正则替换字符串函数re.sub用法示例(1)

本文实例讲述了Python正则替换字符串函数re.sub用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替换成自己想要的字符串的方法re.sub 函数进行以正则表达式为基础的替换工作…

LeetCode 24 Swap Nodes in Pairs (交换相邻节点)

题目链接&#xff1a; https://leetcode.com/problems/swap-nodes-in-pairs/?tabDescriptionProblem: 交换相邻的两个节点如上图所示&#xff0c;递归进行交换。从最尾端开始&#xff0c;当最尾端只有一个节点时&#xff0c;停止交换否则执行 swap(head.next) 参考代码&#x…

Netra基于Rdk平台的软件框架设计

Netra&#xff08;DM8168&#xff09;处理器是个多核处理器&#xff0c;每个核之间相互独立却又相互关联&#xff0c;如何高效简洁地利用每个核完成一套系统功能是非常关键的&#xff0c;RDK这套软件平台就是针对这种多核平台设计的一套多通道视频应用方案&#xff0c;主要用于…

电感啸叫原因与应对措施

大部分硬件工程师应该都遇到过,PCBA上电后出现“滋滋滋”的叫声,其声响或大或小,或时有时无,或深沉或刺耳,或变化无常者皆有。该现象我们称为“啸叫”,一般分为电感啸叫和电容啸叫。 其中电感啸叫最为常见,尤其在DCDC电路中,大部分是因为 器件参数选择不合理 导致的。…

ASP.NET Web API 记录请求响应数据到日志的一个方法

原文:ASP.NET Web API 记录请求响应数据到日志的一个方法原文&#xff1a;http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个方法 REST风格的服务架构已经成为越来越多人的选择&#xff0c;之前我用过WCF来实…

Nginx + php

Nginx php 目前有两种方式1.nginx apache nginx 负责静态内容、反向代理和保持连接&#xff0c;apache则负责处理动态内容。 2.nginx fastcgi php-fpm一、nginx apache 采用Nginx前端Apache后端的服务器架构&#xff0c;这样可以很好地结合了Nginx高并发和静态页面高效率以…

Android Fragment完全解析,关于碎片你所需知道的一切

我们都知道&#xff0c;Android上的界面展示都是通过Activity实现的&#xff0c;Activity实在是太常用了&#xff0c;我相信大家都已经非常熟悉了&#xff0c;这里就不再赘述。 但是Activity也有它的局限性&#xff0c;同样的界面在手机上显示可能很好看&#xff0c;在平板上就…

图像--摄像头组成与基本参数

基本组成 Sensor: 图象传感器 FPC: 电路板 IR:红外滤波片 Holder:基座 Lens:镜头 其他 核心部件&#xff1a;1- SENSOR 2- LENS Sensor参数 类别 指标 参考 备注 Sensor 厂家 sony 三星 OV 格科微由原厂提供完整规格书和型号 低像素需要注意 分辨率 0.3MP (VGA)模组…

1.I2C协议

1.I2C协议2条双向串行线&#xff0c;一条数据线SDA&#xff0c;一条时钟线SCL。SDA传输数据是大端传输&#xff0c;每次传输8bit&#xff0c;即一字节。支持多主控(multimastering)&#xff0c;任何时间点只能有一个主控。总线上每个设备都有自己的一个addr&#xff0c;共7个bi…

联想启天M715E安装硬盘保护系统和网络同传

现还是学生&#xff0c;虽然大四课上的少&#xff0c;实验室去的也不勤了&#xff0c;但指导老师有事吩咐&#xff0c;还是要办好的。 沈老师荣升软件实验室主任&#xff0c;学校给了2个机房&#xff0c;一个70台联想启天M715E&#xff0c;一个30台新的70台新主机&#xff08;配…

图像--摄像头数据输出格式与传输接口

一、 数据输出格式 RAW data 格式: CMOS 在将光信号转换为电信号时的电平高低的原始记录&#xff0c;单纯地将没有进行任何处理的图像数据&#xff0c;即摄像元件直接得到的电信号进行数字化处理而得到的。 每个pixel只能感光R光或者B光或者G光&am…

计算机入门与学习回忆(一)

这个回忆&#xff0c;不是记录什么成功&#xff0c;而记录一些失败的经历。 大约初中还是高中的时候&#xff0c;就玩过计算机。那是一个很冷的冬天的晚上&#xff0c;一台华南计算机所造的仿APPLE II的计算机。 这台计算机很简陋&#xff0c;只有一个主机&#xff0c;没有屏幕…

怎么建立微信生态用户增长模型?

微信最新数据及中国网民最新数据概述截止到2018年&#xff0c;移动网民用户增长放缓&#xff0c;接近人口大盘。微信作为全国移动网民的一款超级应用&#xff0c;在移动网民的***率超过90%。微信最近一年的新增用户主要来自中老年用户群体和乡镇用户群体***。易观最新发布的8月…

数据库设计的三大范式

三大范式是为了了更好的设计数据库 1. 所谓第一范式&#xff08;1NF&#xff09;是指在关系模型中&#xff0c;对列添加的一个规范要求&#xff0c;所有的列都应该是原子性的&#xff0c;即数据库表的每一列都是不可分割的原子数据项&#xff0c;而不能是集合&#xff0c;数组&…

图像-摄像头驱动流程

驱动架构 在Kernel层用camera的驱动将其驱动起来以后&#xff0c;将硬件驱动接口交给Hal&#xff1b; 上层的camera应用程序在andriod实时系统的虚拟机中&#xff0c;加载留给camera公用的库文 件&#xff0c;调用Hal层的接口来控制camera硬件来实现功能。 驱动流程 打开came…

第四章

选择结构&#xff08;二&#xff09; 学习本章会用到的单词&#xff1a; case&#xff1a;实例&#xff0c;情形&#xff0c;情况 switch&#xff1a;转换&#xff0c;切换&#xff0c;开关 default&#xff1a;系统默认值&#xff0c;违约&#xff0c;预设。缺省 exit&#xf…

tensorflow的一些函数

1.tf.constant(value,dtypeNone,shapeNone,nameConst) 注意这个函数创造的是一个常数tensor&#xff0c;而不是一个具体的常数 value:即可以是list&#xff0c;也可以是value dtype:对应生成的tensor里的元素的类型 # Constant 1-D Tensor populated with value list.tensor t…