ToB创业的测试与运维自动化
海阔天空
2021年11月
上一篇文章《ToB创业的现场实施》(见:https://www.jianshu.com/p/c44e74109c19),我跟大家分享的是关于售前支持的思考。本篇文章,我将分享有关单项能力之“测试与运维”的思考。
由于我之前有几年的开发经历,所以在负责公司产品的测试与运维工作时会尽可能地加入技术因素,让测试与运维向自动化方向发展。
我们先讲测试,ToB的产品一般向用户暴露的有WEB界面和HTTP接口。对于开放接口的测试,自然是开发一套测试软件来验证接口的各项功能、性能是否达到接口使用说明文档中所宣称的内容。而用户在WEB界面的操作通常包括“输入参数、前端校验参数合法性、前端调用后端接口、前端获得后端返回结果并在页面上回显”等环节,这些环节可以分解为两类,一类是前端不与后端交互(前端对用户输入参数的校验以及对后端返回结果的回显),另一类是前端与后端交互(即前端调用后端接口)。这样,对于用户操作的WEB界面的功能测试,就可以分两阶段来测试:第一阶段是自动化执行的,目的是测试后端代码,具体做法是:编写测试程序,模拟前端用户操作行为,直接调用后端接口,来验证输入参数(这阶段测试时,要让输入参数合法有效)与输出结果是否匹配(需要覆盖所有业务场景做测试);第二阶段是手动操作的,目的是测试前端代码,具体做法是:人工使用WEB界面执行业务操作(也可以使用一些成熟的测试工具),对输入参数做合法性校验以及对第一阶段的返回结果在WEB界面进行友好显示。其中,WEB界面功能测试的第一阶段工作是用测试程序自动化执行的,可以将那些需要反复执行的业务流程固化(下次再测试的时候,直接运行这个测试程序即可),提高整体的测试效率,如果第一阶段的测试完成得好(输入和输出匹配正确),到了第二阶段,测试重点就可以放到前端代码上(输入参数合法性校验及返回结果友好显示)。根据我的经验,测试工作,能自动化的部分尽量自动化,这样可以全面、快速地展开多轮测试。以上只是初创公司在没有专业测试团队的情况下的选择,如果有专业的测试团队,则可以使用LoadRunner之类的成熟测试工具。
前面讲的是用测试自动化来提高测试效率的方面,下面再来讲一下测试的另一个重要方面,即如何安排优先级来提高整体测试效率。测试工作就像开发工作一样,都是有任务优先级的,很多测试人员并没有意识到测试优先级的重要性,总是习惯性地从第一个软件功能测试到最后一个软件功能,这样做,一来没有突出测试工作的轻重缓急从而导致在重要软件功能的测试方面投入不够而未发现那些隐藏得很深的Bug,二来测试的整体效率不高,无法及时将测试结果反馈给研发团队,从而影响了整体的开发/测试的进度。正确的做法是不但要编写测试用例,而且要突出各项测试任务的优先级和所需投入的工作量,其中,核心功能点的测试任务要加大投入并考虑使用多种方法或多种工具去全方位地深度地验证该功能是否存在潜在的Bug。根据我的经验,测试一个软件产品时,首先要能跑得通整个业务流程,在此前提下,核心功能的方方面面都测试一遍,非核心功能则可以适当忽视细节(当然,后期有时间的时候可以再慢慢补充测试)。
关于运维工作,和测试工作类似,我也推崇能自动化的部分尽量自动化,再辅以人工运维,从而确保软件、网络和服务器的正常运转。
我们上线一个软件项目时,同步会开发并上线一款对应的运维监控软件,该监控软件包括的基本功能有:监视服务器和网络的主要运行参数(比如:CPU占有率/内存使用率/磁盘空间/网络带宽占用率等等)、监视软件工作情况(比如:记录业务异常/出现软件停服重启软件等等)、监视连接数据库服务器的主要运行参数(比如:IOPS/内存使用率等等)、发送告警信息(以上异常情况发生时发送邮件或短信告警通知)。运维工程师收到异常告警通知时人工介入排查故障并恢复软件正常运行。这样,可以在保障软件服务正常工作的情况下尽可能地减轻运维压力,节约运维成本。通常,云服务提供商(比如阿里云、腾讯云、华为云等)都会提供应用服务器和数据库服务器等设备的状态监控API,建议尽量云服务提供商提供的API来监视设备健康状态,涉及到自身业务的个性化监控则需要自定义开发监控软件。目前,市场上有大量的云资产代运维的专业公司,如果初创公司使用的云资源数量较多(8个设备以上)或者使用了多家的云资产,那么建议选择这些云资产代运维的公司来打理众多的云资产,这样既经济又专业。
现在举两个运维中遇到的意外情况的例子:
2019年2月份,公司需要将阿里云上SQLServer数据库里的数据迁移到阿里云MySQL数据库上,目的是为了降低数据库租用成本(因为相同规格下,MySQL比SQLServer要便宜很多),而阿里云不提供异构数据库迁移工具,我只能从网上找,最后找到一款名为SQLyog的软件。在本地服务器上测试了一下,将一个表的数据(数据量大约有300万行)从MySQL迁移SQLServer需要1小时左右,但将该软件安装到阿里云ECS上迁移数据的速度却只有100万行/小时。在走投无路的情况下,我只能尝试自己开发一个软件来做异构数据迁移的工作,经过几天努力,异构数据迁移工具软件(我命名为DBTransferTool,Github地址是https://github.com/SmilyZhu/DbTransferTool)开发完毕,在阿里云上实测的迁移速度达到2000万行/小时,是SQLyog的20倍,这仅仅是单线程执行的速度,如果继续优化做成多线程执行的话,我相信可以达到5000万行/小时甚至更快,不过,这个自研工具已经达到我的预期目标,就没有再去优化了。这是开发能力在运维工作中起到的巨大作用。
2019年8月,在一次清理历史数据时,误操作删除了阿里云RDS实例中一张表里的全部数据(应该只需要删除过期的数据),发现问题后立即做了如下处理:停止软件服务,先找到误操作发生的准确时间点,然后从binlog文件恢复数据,再做好老数据与新数据的合并,最后启动软件服务。
以上描述的是创业公司在软件测试和服务器运维时值得注意的重要方面,即尽量让测试和运维工作自动化,减轻人的压力;另外要关注重点,对核心任务要多加投入,解决主要矛盾。
总结一下,互联网B2B领域的小微创业公司,在测试、运维等岗位很难投入专职人员,所以工程师需要尽量让这些工作变得自动化,降低对人力的需求,节约公司运营成本。本文所说的内容或许对创业团队负责测试和运维的人员有一些启发。以上均是点到为止,并没有涉及到具体行业或产品,有兴趣的同学可以私下交流。下一篇文章,我将与大家分享“创业公司的管理”方面的思考。