Java SDK 集成测试概述及实践

Java SDK 集成测试概述及实践

项目背景

作为长期专注于区块链底层平台设计和研发的专业团队,趣链科技对产品质量尤其重视。软件测试可以说是平台的质量保证的最关键一环。

底层的技术平台通常会提供对外交互的 SDK,在测试环节中,可以通过 SDK 对系统进行集成测试,从而验证系统的各项功能是否能够正常使用。

Java SDK 是软件开发中应用最广泛的一类,以在 BitXMesh 项目测试的实践为背景,介绍 Java SDK 集成测试的一些心得体会。

系统提供的功能主要有如下几点:

  1. 资源库中资源管理,包括文件 / 数据库 / 模型 /Restful 接口等

  2. 联邦计算

  3. 跨节点资源获取和展示

  4. 系统和用户管理

起初测试工具较为零散,新增模块或者功能之后往往趋向新建一个小的测试项目进行测试。但是随着功能和客户越来越多,质量保证的要求不能放松,构建一个完善的测试项目成为必然要求。

本文以该项目为例,详细介绍测试项目的分析、规划、实现、具体模块示例以及最终形成的测试报告。

**
**

测试项目分析

在测试项目中,最核心的一个环节就是测试用例设计,要想设计出优雅的测试用例,首先要对项目本身有充分的了解,根据对项目的功能和代码结构分析,将测试项目用例结构分为以下三类:

  1. 用户权限相关测试:验证不同类型的用户对模块操作的权限正常

  2. 异常数据测试:包括数据异常和功能逻辑异常

  3. 正常功能测试

单独的用例实现起来难度不大。

但要充分考虑到后续维护,特别是权限测试异常测试两方面。

因此在设计测试用例的时候要秉承以下两点原则:

  1. 优化代码结构,减少代码冗余,增加可读性;

  2. 测试用例数据和测试代码分离,方便后面单独维护测试用例。

测试项目规划

测试框架

TestNG 是一个开源自动化测试框架,其灵感来自 JUnit 和 NUnit,但引入了一些新的功能,使其功能更强大,使用更方便,它在很大程度上借鉴了 Java 注解来定义测试。

本项目使用 TestNG 进行测试。Excel 维护用例数据,封装函数读取其中数据,使用 dataProvider 传递给测试函数进行测试。

Java SDK 集成测试概述及实践

数据驱动测试,函数传参形式

由于系统功能耦合性较强,因此单个用例往往包含较多操作。我们把类似流程的测试用例组合到一起,对各个操作进行位置编号,使用 Pair 的形式传参,对预期出现异常的位置进行断言。

测试过程中异常捕获和处理

权限相关的测试,每个操作都可能有权限或者没有权限,因此每个操作完成后直接与预期进行对比进行即可,捕获到异常就断言错误码。

流程相关的测试,如果前一个操作对后面操作有影响,检测到该操作抛出异常后直接对错误码进行断言,然后退出当前测试,继续后面测试;反之继续进行后面操作。

自动触发 Jenkins 项目构建

使用触发器执行自动构建,具体配置参考第六板块【持续集成

项目结构

用例组织方式

测试用例在内部的 Thoughts 环境以表格的形式编写,用例来源于需求文档和系统测试分析文档。

测试项目结构

在这个项目中使用项目管理工具 Maven 来管理构建和报告。

项目结构如下:

Java SDK 集成测试概述及实践

版本控制

版本号与待测项目版本号保持一致,在 Git 中进行维护。

部分实现示例

BitXMesh 中有多种不同类型的用户,这些用户对不同模块和资源的操作权限不一样,因此需要逐一进行权限测试,看是否有遗漏或者越权问题。

另外,BitXMesh 需求中对部分输入信息有限制,如长度 / 是否为空 / 重复 / 特殊格式等,需要对边界值和其他相关逻辑进行测试。

权限测试 (有统一的报错代码)

模块中权限主要包括创建 / 删除 / 查看 / 修改 / 上传 / 下载 / 赋权操作等。

因为创建是后面操作的基础,因此单独指定用例对创建功能进行权限测试;其他操作共用一个用例,每轮对不同用户执行用例时,让指定用户先创建,再执行后面操作。

一个用户在一个模块中的所有权限作为一组测试数据;有权限时操作正常完成,没有权限时抛出异常,状态码为指定值;获取错误信息之后对捕获到的每个异常状态码进行断言对比即可,当前测试继续进行。

Java SDK 集成测试概述及实践

异常数据测试 (有专门的报错代码)

这里对模块功能做全流程测试。当测试程序捕获到有操作抛出异常的时候就直接返回,不执行后续测试。

为了方便进行数据驱动测试,我们把用例中每个操作顺序进行标注,从 1 开始递增;如果期望在第 n 个操作处捕获到异常,则可以传入 (n, errCode) 进行断言验证

Java SDK 集成测试概述及实践

**

**

持续集成

Jenkins 配置

编写部署脚本,使用 shell 命令运行集成测试

触发流程

  1. Git webhook 检测到打 tag 或者主干分支有合并之后,触发上游 Jenkins 打包任务,生成可执行文件,并推送到 Nexus 仓库

  2. 生成可执行文件任务成功后,触发集成测试任务,远程拉取可执行文件,执行部署和测试

程序运行环境

Jenkins slave 节点提供的 Docker 容器。因为单个 BitXMesh 占用资源不多,因此可以在一个 Docker 容器中同时运行测试程序和多个 BitXMesh 节点程序。

测试报告

本项目使用了 maven 插件 maven-surefire-plugin 来生成测试报告。项目测试完成之后,自动生成 target/surefire-reports/emailable-report.html 报告,在 Jenkins 中指定相应测试报告路径即可。

pom.xml 中配置如下:

Java SDK 集成测试概述及实践

总结

权限测试和异常测试是测试过程中两个需要注意的点,需要在自动化测试中提前规划。

前者容易导致代码比较臃肿;后者难以一次性考虑全面,需要后续进行维护。通过合理的数据驱动测试可以解决这两块的问题,再加上一些工程化的方式就可以实现比较完善的自动化测试。

大多数测试人员是界面功能测试入门,对后台服务测试需要一定时间进行了解。

Java SDK 本质是把系统调用接口封装成类库,供客户端使用;开展集成测试时,需要提前熟悉 SDK 使用文档,然后通过分层架构去进行规划即可。

作者简介

代家雄

来自数据网格实验室团队

主要负责分布式数据共享平台整体质量保证工作

文末福利

趣链科技区块链技术交流群全面升级!

技术交流不迷路,技术大咖等你来~

快快添加小助手桔子(微信:18458407117 )备注“1026”领你进入技术奥秘世界

Java SDK 集成测试概述及实践

来源链接:mp.weixin.qq.com

分享到新浪微博 微信分享 扫码分享
分享到 Facebook
分享到 Twitter

该内容来自于互联网公开内容,非区块链原创内容,如若转载,请注明出处:https://htzkw.com/archives/27906

联系我们

aliyinhang@gmail.com