您的位置:首页 > 编程语言 > Java开发

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

2017-03-09 19:01 387 查看

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

知识共享主要内容:

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

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

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

一、DUBBODUBBO架构

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

2、DUBBO架构:

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

服务提供者:

1)定义服务接口

2)定义接口实现类

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

4)加载Spring配置

服务消费者:

5)Spring配置引用远程服务

6)加载Spring配置,并调用远程服务

uClassPathXmlApplicationContext加载配置,然后用getBean方法获取远程代理。

u用IOC注入:测试脚本是用这种方式的。

三、Dubbo服务接口测试环境准备

1、POM.xml引入对应service应用jar依赖。

比如:

dependency>

<groupId>com.datatrees.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:referenceinterface="com.datatrees.basisdata.bankbill.service.BillDetailService"id="billDetailService"url="dubbo://121.43.177.8:20100"timeout="10000"/>

然后在spring-context.xml加入引入资源配置即可。

<importresource="spring-secret.xml"/>


四、脚本设计结构

创建测试类公共父类,继承AbstractTestNGSpringContextTests或者AbstractJUnit4SpringContextTests。

创建测试类,继承父类,编写相应代码。

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

1、继承AbstractJUnit4SpringContextTests方法。

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations={"classpath:/spring-context.xml"})

@Configuration

publicclassBaseJunit4TestextendsAbstractJUnit4SpringContextTests{

}


2、继承AbstractTestNGSpringContextTests方法。

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations={"classpath:/spring-context.xml"})

@Configuration

publicclassBaseTestNGTestextendsAbstractTestNGSpringContextTests{

}

测试类继承BaseTestNGTest即可。

六、数据驱动两种基本编写方法:

1、基于Junit数据驱动。

u父类配置:

@RunWith(Parameterized.class)

@ContextConfiguration(locations={"classpath:/spring-context.xml"})

@Configuration

publicclassBaseJunit4TestextendsAbstractJUnit4SpringContextTests{

protectedTestContextManager
testContextManager;

@Before

publicvoidsetUpContext()throws
Exception{

this.testContextManager=new
TestContextManager(getClass());

this.testContextManager.prepareTestInstance(this);

}

}

u接口测试类需编写一个构造类和一个由@Parameterized.Parameters参数数据方法

@Parameterized.Parameters

publicstaticCollection<Integer[]>getTestParameters(){

//

//List<Integer[]>list=newArrayList<Integer[]>();

//list.add(newInteger[]{2000998248});//expected,valueOne,valueTwo

//list.add(newInteger[]{2000020021});

//list.add(newInteger[]{2001999335});

//Stringst=list.toString();

//System.out.println("list值:"+st);

//returnlist;

//}

List<Integer[]>list=newArrayList<Integer[]>();

list=Arrays.asList(newInteger[][]{{2000998248},{2000020021},{2001999335}});

returnlist;

}


构造方法:

publicTestSelectListByUserId2(Integeruserid){

this.testUser=userid;

}

2、基于TESTNG数据驱动。

u父类配置:

@ContextConfiguration(locations={"classpath:/spring-context.xml"})

@Configuration

publicclassBaseTestNGTestextendsAbstractTestNGSpringContextTests{

}

u测试接口类需加一个由@DataProvider(name="集合标识")注解的数据收集的方法,并将@Test(dataProvider="集合标识")給需要用参数的测试方法。

数据收集方法:

@DataProvider(name="testdata")

publicObject[][]dataprovide()throwsIOException{

System.out.println("dataprovide方法执行");

//returnnewObject[][]{{2000020013,2},{2001000138,0},{2001000139,2}};

Object[][]testData=ExcelHandle.readXlsx(excel,"工作表2");

returntestData;

}

u测试方法:

@Test(dataProvider="testdata")

publicvoidtest_case_1(HashMap<String,String>map)throwsException{

operatorUserId=Integer.valueOf(map.get("userId"));

exceptedvalue=Integer.valueOf(map.get("excepted"));


//++++++++++++++实际值+++++++++++++

Integeractual_value=

billService.getUserEmailNameCount(operatorUserId);

//预期值

Integerexcepted_value=get_excepted_value(operatorUserId);

//++++++++++++++验证+++++++++++++

Assert.assertEquals(actual_value,exceptedvalue);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐