51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4172|回复: 0
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:32
  • 签到天数: 399 天

    连续签到: 5 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-11-29 15:31:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 测试积点老人 于 2018-11-29 15:35 编辑

    知识共享主要内容:

    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.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:reference interface="com.datatrees.basisdata.bankbill.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"})@Configurationpublic class BaseJunit4Test extends AbstractJUnit4SpringContextTests {}

    2、    继承AbstractTestNGSpringContextTests方法。

    @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:/spring-context.xml"})@Configurationpublic class BaseTestNGTest extends AbstractTestNGSpringContextTests {}               测试类继承BaseTestNGTest即可。

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

    1、 基于Junit数据驱动。

    u  父类配置:

    1. @RunWith(Parameterized.class)
    2. @ContextConfiguration(locations = {"classpath:/spring-context.xml"})
    3. @Configuration
    4. public class BaseJunit4Test extends AbstractJUnit4SpringContextTests {
    5.     protected TestContextManagertestContextManager;
    6.     @Before
    7.     public void setUpContext() throwsException {
    8.         this.testContextManager = newTestContextManager(getClass());
    9.         this.testContextManager.prepareTestInstance(this);
    10.     }
    11. }
    复制代码

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

    1. @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;    }
    复制代码

    2、 基于TESTNG数据驱动。

    u  父类配置:

    1. @ContextConfiguration(locations = {"classpath:/spring-context.xml"})@Configurationpublic class BaseTestNGTest extends AbstractTestNGSpringContextTests{}
    复制代码

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

    数据收集方法:
    1. @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  测试方法:

    1.   @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);    }
    复制代码

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-20 19:43 , Processed in 0.068675 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表