我的项目背景
作为长期专一于区块链底层平台设计和研发的业余团队,趣链科技对产品质量尤其器重。软件测试能够说是平台的质量保证的最要害一环。
底层的技术平台通常会提供对外交互的 SDK,在测试环节中,能够通过 SDK 对系统进行集成测试,从而验证零碎的各项性能是否可能失常应用。
Java SDK 是软件开发中利用最宽泛的一类,以在 BitXMesh 我的项目测试的实际为背景,介绍 Java SDK 集成测试的一些心得体会。
零碎提供的性能次要有如下几点:
资源库中资源管理,包含文件 / 数据库 / 模型 /Restful 接口等
联邦计算
跨节点资源获取和展现
零碎和用户治理
起初测试工具较为零散,新增模块或者性能之后往往趋势新建一个小的测试项目进行测试。然而随着性能和客户越来越多,质量保证的要求不能放松,构建一个欠缺的测试项目成为必然要求。
本文以该我的项目为例,具体介绍测试项目的剖析、布局、实现、具体模块示例以及最终造成的测试报告。
测试项目剖析
在测试项目中,最外围的一个环节就是测试用例设计,要想设计出优雅的测试用例,首先要对我的项目自身有充沛的理解,依据对我的项目的性能和代码构造剖析,将测试项目用例构造分为以下三类:
用户权限相干测试:验证不同类型的用户对模块操作的权限失常
异样数据测试:包含数据异样和性能逻辑异样
失常功能测试
独自的用例实现起来难度不大。
但要充分考虑到后续保护,特地是权限测试和异样测试两方面。
因而在设计测试用例的时候要秉承以下两点准则:
优化代码构造,缩小代码冗余,减少可读性;
测试用例数据和测试代码拆散,不便前面独自保护测试用例。
测试项目布局
测试框架
TestNG 是一个开源自动化测试框架,其灵感来自 JUnit 和 NUnit,但引入了一些新的性能,使其性能更弱小,应用更不便,它在很大水平上借鉴了 Java 注解来定义测试。
本我的项目应用 TestNG 进行测试。Excel 保护用例数据,封装函数读取其中数据,应用 dataProvider 传递给测试函数进行测试。
数据驱动测试,函数传参模式
因为零碎性能耦合性较强,因而单个用例往往蕴含较多操作。咱们把相似流程的测试用例组合到一起,对各个操作进行地位编号,应用 Pair<Integer, Integer> 的模式传参,对预期出现异常的地位进行断言。
测试过程中异样捕捉和解决
权限相干的测试,每个操作都可能有权限或者没有权限,因而每个操作实现后间接与预期进行比照进行即可,捕捉到异样就断言错误码。
流程相干的测试,如果前一个操作对前面操作有影响,检测到该操作抛出异样后间接对错误码进行断言,而后退出以后测试,持续前面测试;反之持续进行前面操作。
主动触发 Jenkins 我的项目构建
应用触发器执行主动构建,具体配置参考第六板块【继续集成】
我的项目构造
用例组织形式
测试用例在外部的 Thoughts 环境以表格的模式编写,用例来源于需要文档和零碎测试剖析文档。
测试项目构造
在这个我的项目中应用项目管理工具 Maven 来治理构建和报告。
我的项目构造如下:
版本控制
版本号与待测我的项目版本号保持一致,在 Git 中进行保护。
局部实现示例
BitXMesh 中有多种不同类型的用户,这些用户对不同模块和资源的操作权限不一样,因而须要逐个进行权限测试,看是否有脱漏或者越权问题。
另外,BitXMesh 需要中对局部输出信息有限度,如长度 / 是否为空 / 反复 / 非凡格局等,须要对边界值和其余相干逻辑进行测试。
权限测试 (有对立的报错代码)
模块中权限次要包含创立 / 删除 / 查看 / 批改 / 上传 / 下载 / 赋权操作等。
因为创立是前面操作的根底,因而独自指定用例对创立性能进行权限测试;其余操作共用一个用例,每轮对不同用户执行用例时,让指定用户先创立,再执行前面操作。
一个用户在一个模块中的所有权限作为一组测试数据;有权限时操作失常实现,没有权限时抛出异样,状态码为指定值;获取错误信息之后对捕捉到的每个异样状态码进行断言比照即可,以后测试持续进行。
异样数据测试 (有专门的报错代码)
这里对模块性能做全流程测试。当测试程序捕捉到有操作抛出异样的时候就间接返回,不执行后续测试。
为了不便进行数据驱动测试,咱们把用例中每个操作程序进行标注,从 1 开始递增;如果冀望在第 n 个操作处捕捉到异样,则能够传入 (n, errCode) 进行断言验证
继续集成
Jenkins 配置
编写部署脚本,应用 shell 命令运行集成测试
触发流程
Git webhook 检测到打 tag 或者骨干分支有合并之后,触发上游 Jenkins 打包工作,生成可执行文件,并推送到 Nexus 仓库
生成可执行文件工作胜利后,触发集成测试工作,近程拉取可执行文件,执行部署和测试
程序运行环境
Jenkins slave 节点提供的 Docker 容器。因为单个 BitXMesh 占用资源不多,因而能够在一个 Docker 容器中同时运行测试程序和多个 BitXMesh 节点程序。
测试报告
本我的项目应用了 maven 插件 maven-surefire-plugin 来生成测试报告。我的项目测试实现之后,主动生成 target/surefire-reports/emailable-report.html 报告,在 Jenkins 中指定相应测试报告门路即可。
pom.xml 中配置如下:
总结
权限测试和异样测试是测试过程中两个须要留神的点,须要在自动化测试中提前布局。
前者容易导致代码比拟臃肿;后者难以一次性思考全面,须要后续进行保护。通过正当的数据驱动测试能够解决这两块的问题,再加上一些工程化的形式就能够实现比较完善的自动化测试。
大多数测试人员是界面功能测试入门,对后盾服务测试须要肯定工夫进行理解。
Java SDK 实质是把零碎调用接口封装成类库,供客户端应用;发展集成测试时,须要提前相熟 SDK 应用文档,而后通过分层架构去进行布局即可。
作者简介
代家雄
来自数据网格实验室团队
次要负责分布式数据共享平台整体质量保证工作