由于测试项目需要,今年五月开始接触、进行dubbo接口测试,记录所学如下
公司中的项目除http接口外,一些微服务项目中涉及dubbo接口测试,目前测试的方式是Spring+Dubbo+TestNG——利用dubbo实现RPC(在测试项目中调用开发项目提供的函数/方法),利用Spring Framework的各种特性提高测试代码的开发效率,使用TestNG测试框架灵活地编写测试代码。
测试前你需要先了解一些相关的基础知识,相关内容可参见以下链接,本文不再冗述:
【知识点】
●Dubbo:dubbo简介
●TestNG:TestNG教程
●Spring Testing:Spring、Spring Boot和TestNG测试指南
●Mavan
●Spring结合TestNG搭建测试环境:使用 Spring 进行单元测试
【业务】
●dubbo接口文档:根据送测相关的接口文档,了解需要测试的接口的信息(版本号、接口&方法名、接口功能)
●开发代码:若接口文档不详细、更新不及时,直接查看对应送测分支、版本的代码。
接下来以x项目的一个dubbo接口为例,说说测试的大致流程。
举例的接口信息如下图:
前提先将Spring+testNG环境搭好先,再进行Dubbo接口测试环境搭建:
1、在pom.xml引入Dubbo依赖包
(不详细描述,不清楚可以参考调用dubbo接口的实际业务方项目中的pom.xml)
2、Pom.xml引入对应service应用jar依赖 :
1.0-SNAPSHOTuser-api.version>
com.x
user-api
${user-api.version}
3、 Dubbo服务spring配置
由于测试过程是RPC(远程调用接口)的过程,测试项目相当于服务消费方Consumer,开发项目相当于服务提供方Provider,所以测试只需要进行消费方的spring配置。
(1) 我们先看一下服务提供方的service配置是怎样的,(配置文件路径provider/src/main/resources/spring/applicationContext-dubbo-provider.xml)
基础配置
(2)我们在工程resources目录下新建一个xml文件(applicationContext-dubbo-consumer.xml)
只需要对每个service进行如下配置:
(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有:空指针异常、未被开发考虑到的场景、未作处理的一些异常传参、时延率异常等。
以上就是用Spring+Dubbo+TestNG方式来测试dubbo接口的一个简单介绍。
jmeter对dubbo接口进行压力测试。