我的项目背景
作为长期专一于区块链底层平台设计和研发的业余团队,趣链科技对产品质量尤其器重。软件测试能够说是平台的质量保证的最要害一环。
底层的技术平台通常会提供对外交互的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应用文档,而后通过分层架构去进行布局即可。
作者简介
代家雄
来自数据网格实验室团队
次要负责分布式数据共享平台整体质量保证工作