Spring+Dubbo+TestNG接口测试

由于测试项目需要,今年五月开始接触、进行dubbo接口测试,记录所学如下


公司中的项目除http接口外,一些微服务项目中涉及dubbo接口测试,目前测试的方式是Spring+Dubbo+TestNG——利用dubbo实现RPC(在测试项目中调用开发项目提供的函数/方法),利用Spring Framework的各种特性提高测试代码的开发效率,使用TestNG测试框架灵活地编写测试代码。


1、前言

测试前你需要先了解一些相关的基础知识,相关内容可参见以下链接,本文不再冗述:

【知识点】

●Dubbo:dubbo简介

●TestNG:TestNG教程

●Spring Testing:Spring、Spring Boot和TestNG测试指南

●Mavan

●Spring结合TestNG搭建测试环境:使用 Spring 进行单元测试

【业务】

●dubbo接口文档:根据送测相关的接口文档,了解需要测试的接口的信息(版本号、接口&方法名、接口功能)

扫描二维码关注公众号,回复: 8547721 查看本文章

●开发代码:若接口文档不详细、更新不及时,直接查看对应送测分支、版本的代码。

接下来以x项目的一个dubbo接口为例,说说测试的大致流程。

举例的接口信息如下图:

2、Dubbo服务接口测试环境搭建

前提先将Spring+testNG环境搭好先,再进行Dubbo接口测试环境搭建:

1、在pom.xml引入Dubbo依赖包

(不详细描述,不清楚可以参考调用dubbo接口的实际业务方项目中的pom.xml)

2、Pom.xml引入对应service应用jar依赖 :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<properties>

  <usercenter-api.version>1.0-SNAPSHOTuser-api.version>

</properties>

<dependencies>

 <dependency>

   <groupId>com.x</groupId>

   <artifactId>user-api</artifactId>

   <version>${user-api.version}</version>

 </dependency>

</dependencies>

</project>

3、 Dubbo服务spring配置

由于测试过程是RPC(远程调用接口)的过程,测试项目相当于服务消费方Consumer,开发项目相当于服务提供方Provider,所以测试只需要进行消费方的spring配置。

(1) 我们先看一下服务提供方的service配置是怎样的,(配置文件路径provider/src/main/resources/spring/applicationContext-dubbo-provider.xml)

<description>基础配置</description>

<!-- 提供方应用信息,用于计算依赖关系 -->

<dubbo:application name="user"/>

<!-- 使用zookeeper注册中心暴露服务地址 -->

<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}"/>

<!-- 用dubbo协议在任意一个没占用端口暴露服务 -->

<dubbo:protocol name="dubbo" port="-1" threads="XX"/>

<dubbo:provider id="user-provider" filter="logInputParamsFilter" timeout="2000"/>

<!-- 声明需要暴露的服务接口 -->

<dubbo:service interface="com.x.api.service.UserApiService" ref="userApiService"/>

<!-- 具体的实现bean -->

<bean id="userApiService" class="com.x.api.impl.UserApiServiceImpl"/>

(2)我们在工程resources目录下新建一个xml文件(applicationContext-dubbo-consumer.xml)

只需要对每个service进行如下配置:

<dubbo:application name="ucser-consumer"/> 

<dubbo:reference id="userApiService" interface="com.x.api.service.UserApiService"/>

(3)spring基本配置好了,可以进行测试脚本的编写了

package com.x.User;

import com.google.common.collect.Sets;

import com.x.api.service.UserApiService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;

import org.testng.annotations.Test;

@ContextConfiguration(locations = "classpath:spring/*.xml")

public class UserApiServiceTest extends AbstractTestNGSpringContextTests {

    @Autowired

    private UserApiService userApiService;

    @Test

    private void testgetUserInDepartment(){

        Set ids = userApiService.getUser("xxxxxxxxxxxxxxxxxxxxx");

        System.out.println(ids);}

}

在上面的测试代码里要注意三点::

测试类需要继承AbstractTestNGSpringContextTests,如果不这么做测试类是无法启动Spring容器的

使用了[@ContextConfiguration]是为了加载被测试的Bean

在Spring框架进行bean对象依赖注入时,利用@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。

(4)测试用例的设计

测试代码里可以对方法的参数进行测试&对方法返回进行校验。比如这个getUser(String Id)方法的功能是“获取指定id的用户",参数是id,那么设计测试点时也可以考虑Id为空、用户已删除、不存在id等异常情况,用@DataProvider参数化的方法来进行测试(本文不做展开说明)。

测试时要考虑:

●接口是否正常处理各种参数情况(包括接口异常有没有正确抛出)。

●可了解业务方的需求,进而判断接口设计在业务逻辑上的合理性。

●所测接口对其他接口的影响(比如update类型接口更新的字段不会导致其他接口需要的数据字段丢失)。

●接口调用时的对应的MQ消息发送是否正常 。

●接口调用的耗时,即时延等性能指标。

一般如此测试可发现的bug有:空指针异常、未被开发考虑到的场景、未作处理的一些异常传参、时延率异常等。

3、小结

以上就是用Spring+Dubbo+TestNG方式来测试dubbo接口的一个简单介绍。

4、扩展

jmeter对dubbo接口进行压力测试

发布了11 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_16683257/article/details/82911490