在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】

5.1 RPC 简介

RPC(Remote Procedure Call,远程过程调用)协议是一种计算机通信协议,该协议允许本地计算机上的程序远程调用另一台计算机上的程序,而在此过程中,开发人员不需要额外编程。另外,在面向对象编程的程序中,远程过程调用又可称为远程调用或远程方法调用。常见的 RPC 协议实现如下

Java RMI:Java Remote Method Invocation,即 Java 远程方法调用,采用了 JDK 中标准的 java.rmi.*实现

Apache Dubbo(以下简称 Dubbo:是阿里巴巴开源的一款高性能、轻量级的 Java RPC 框架。Dubbo 的特点包括可面向接口的远程方法调用、智能容错、负载均衡和服务自动注册及发现等

Hessian:Hessian 是一种二进制协议,它非常适合发送二进制数据,且无须通过附件的形式对该协议进行任何扩展

XML-RPC:XML-RPC 是一个规范和一组实现,它允许程序运行在不同的操作系统和环境中,以通过 Internet 进行过程调用。它是一种基于 HTTP 和 XML 实现的远程过程调用。XML-RPC 的设计虽然非常简单,但它支持传输、处理和返回复杂的数据结构

Apache Thrift:是一种 RPC 协议实现的框架,适用于跨语言服务的开发,它将软件堆栈与代码生成引擎结合起来构建高效的服务,且可无缝连接 Java、Python、C++、JavaScript、C#和 PHP 等编程语言

在众多 RPC 协议的实现中,Dubbo 作为分布式微服务的主流框架之一,在企业级应用开发中使用频率较高,因此本章使用 Dubbo 作为 RPC 接口自动化测试的示例

Dubbo 中的重要角色如图 5-1 所示

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】

图 5-1

服务提供者:提供远程调用的接口

容器:运行服务提供者

服务消费者:调用服务提供者提供的接口

注册中心:服务提供者将服务注册到注册中心,服务消费者从注册中心获取需要使用的服务

监控中心:监控服务提供者和服务消费者的调用过程。监控中心是可选的

5.2 部署待测程序

1.安装 JDK

在即将部署待测程序的服务器上安装 JDK,并配置系统变量如下。这里以 Windows 为例

① 新建 JAVA_HOME,变量值填写如下

C:Program FilesJavajdk1.8.0_212

② 新建 CLASSPATH,变量值填写如下

.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar

③ 编辑 Path,变量值追加如下

;%JAVA_HOME%in

2.安装 ZooKeeper

在 Dubbo 中,注册中心只是一个角色,可以充当该角色的中间件有很多,ZooKeeper 就是其中最常用的一个,同时也是官方推荐使用的。ZooKeeper 可以部署为单机模式或分布式模式,为简明步骤,示例部署为单机模式。这里以 Windows 为例

① 从官网下载 ZooKeeper

② 解压缩到指定目录,笔者解压缩到 D:Program Files 目录

③ 将 conf 目录下的 zoo_sample.cfg 文件重命名为 zoo.cfg,编辑 zoo.cfg 文件,在文件最后加上 admin.serverPort=8081

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=D:javawebapache-zookeeper-3.5.8data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

admin.serverPort=8081
zoo.cfg

④ 双击 bin 目录下的 zkServer.cmd 文件,运行成功后如图 5-2 所示

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】

3.部署待测程序

从笔者的 GitHub 中下载待测程序,程序名为 rpcinterface-0.0.1-SNAPSHOT.jar,下载后放在服务器上,执行以下命令运行即可

java-jar E: pcinterface-0.0.1-SNAPSHOT.jar

这里把本地电脑作为服务器,且待测程序放在了 E 盘根目录,读者需要根据实际情况替换以上路径。运行成功后如图 5-3 所示

5.3 手工测试用例设计

5.3.1 分析待测接口

Dubbo 接口的分析方式和 HTTP 接口类似,接口文档如表 5-1 所示

表 5-1

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】

从接口中可以看出待测程序只有一个接口,但有两个方法,即 getMobilePhone 和 saveMobilePhone,这与第 4 章中的待测程序相同。其中,com.lujiatao.rpcinterface.domain.MobilePhone 为一个实体类,由于不是 Java 的内置类型,因此在接口文档中最好写出全路径

5.3.2 测试用例设计

这里仅以入参作为示例来设计测试用例,5.4 节会将这部分手工测试用例转换成自动化测试用例

1.getMobilePhone 测试用例设计

(1)参数必填项

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】

(2)参数长度

接口文档未提及参数长度,但我们可以提交一个相对较长的参数

Case 4:model=「01234567890123456789012345678901234567890123456789」——返回空

(3)参数组合

在多个参数接口中,参数可能相互响应或制约,因此对参数组合的用例设计必不可少。本接口不涉及(因为只有一个参数

(4)参数规则

一般特殊的参数会有相应规则,比如手机号、身份证号和统一社会信用代码等。本接口不涉及

(5)参数枚举

有些参数只能接收固定的几个参数值,这类参数在服务端大多用枚举定义,在这种情况下,需要测试每种枚举值。本接口不涉及

综合以上各种情况,getMobilePhone 一共设计了 4 条手工测试用例

2.saveMobilePhone 测试用例设计

(1)参数必填项

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】(2)参数长度

接口文档未提及参数长度,但我们可以提交一个相对较长的参数

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】

这里没有对 os 参数做参数长度测试,稍后会说明原因

(3)参数组合

本接口不涉及

(4)参数规则

本接口不涉及

(5)参数枚举

os 参数代表操作系统,而手机操作系统目前主流的只有 Android 和 iOS,且在接口文档的示例中,os 的值为「IOS。在 Java 中,枚举用大写表示,故推测该字段在后台以枚举方式定义

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】

在自动化测试中使用TestNG【第 5 章 RPC 接口自动化测试 5.1RPC简介5.2部署待测程序5.3 手工测试用例设计】os 的值为「ANDROID,上述已有用例覆盖,因此这里不再单独设计用例进行覆盖

Case 6 和 Case 11 试图给枚举赋值空字符串或不存在的枚举,这两种情况会导致编译报错,因此没有必要测试。综合以上各种情况,saveMobilePhone 方法一共设计了 9 条手工测试用例

 

参考资料:

apache-zookeeper-3.5.8-bin.tar.gz

https://github.com/lujiatao2/rpcinterface