宣布实现全平台自动化测试覆盖
悦库的目标客户是企业用户,是一款生产工具,对于工具制造商的我们第一要务是保证核心功能可靠性,其目的是提高客户生产效率。与之相对立的是:产品需要不断迭代和优化,用户的系统环境也在不断变化,这些变化都会影响到产品原有功能的可靠性。软件产品是由大量错综复杂的代码在不同平台运行的综合体,即使最专业的测试工程师甚至开发者自己也不能保证每次的修改不会产生不可预知的其他问题。
为了保证悦库产品健康可持续发展,我们自2022年在原有自动化打包流水线基础上,提出悦库持续交付系统概念,并一直在不断建设,到现在我们非常兴奋的宣布:
产品可靠性 里程碑 => 实现全平台自动化测试覆盖,从悦库网盘5.6版开始,产品发布完全由持续交付系统接管,所有发布包都由测试流水线验证通过后才能发布。
持续交付系统
悦库持续交付系统是基于Jenkins建立的一种由4条流水线,7台虚拟主机/2台树莓派,以及各种脚本和测试用例组成的全平台软件交付系统。目的是:使用一种软件系统维护另外一种更复杂的软件系统的健康发展,摒除人类工作的高昂成本和不可靠特质。
持续交付系统的4条流水线,及其功能:
构建/测试/发布三条流水线的依赖关系如下,而活动流水线是定时自动循环触发的。
测试覆盖度
自动化测试的覆盖度是一个逐步建设过程,理论上代码和功能覆盖度越高越好,但受限于人工测试和机器测试的性价比,我们会更偏向于将机器性价比高的测试任务实现自动化,这类任务一般有以下特点:
- 产品入口功能,对新用户的体验很重要,出现问题会直接流失新用户,品牌形象恶劣。例如悦库的服务端/客户端全平台部署、升级功能。
- 产品的基础/核心业务,对用户很重要,出现问题会对用户造成重大影响,每次发布新版必须确保可靠的。例如悦库的文件存储/上传/下载功能。
- 有固定标准,不经常变动的API接口。
- 一些后台任务,人工测试 不方便的或难以人工验证准确性的。例如悦库的后台数据清理和审计等功能。
单元测试是基于代码函数级别的测试,实施成本很高,适用于逻辑复杂且对准确性要求严苛的领域,如操作系统、航空航天、金融、区块链等领域。
目前悦库的测试流水线建设情况如下图:

覆盖的测试范围包括:
- 服务端(单机版/集群版)部署和升级测试,包括:Windows / Linux平台 。
- 客户端部署和升级测试,包括:Windows、Mac、Web、Linux X64 deb package、Linux X64 rpm package、Linux ARM64 deb package、Linux ARM64 rpm package 。
- 客户端上传/下载测试,包括:全平台客户端上传下载文件/文件夹测试。
- Web端基本功能测试,包括:登录、创建空间、上传下载文件/文件夹测试。
- API测试,正在持续建设中。
目前的测试流水线测试上述任务的运行时间为3小时左右(树莓派性能太差,导致ARM版部署测试很慢),过程中无需任何人为干预,节省大量人力成本同时持续的提高发布产品的速度和可靠性。为了进行全平台覆盖测试,测试流水线需要协调9台主机,在不同的操作系统和CPU架构的平台上进行测试验证,复杂程度可见一斑,并且维护流水线运行的稳定性本身也是有不少的工作量,所以自动化测试成果是显著的,背后的成本也是高昂的。