流水线步骤如下:
for(遍历ftp上的包) 清除redis缓存 执行题目提供的sql建表语句,初始化数据库 从FTP获取压缩包,并解压 If(有nginx配置文件) 替换nginx配置文件,并重载 else 分发默认的nginx配置文件,并重载 执行铺底数据脚本 For(遍历服务个数) 按规则将各个服务压缩包分发至各服务节点 if(存在额外的init.sql) 执行init.sql 执行服务的启动脚本start.sh 运行测试脚本,收集测试结果,计算分数,并输出到CSV文件 停止各服务通常情况下,自动部署使用Jenkins实现。但是Jenkins不支持循环遍历,一个job只能完成一个参赛者的部署和测试。如果每个参赛者一个job,不能保证每个job配置的正确性,并且由于只有一套评审环境,每个人一个job的话,不能保证job的串行执行,多个job同时执行会相互影响。因此决定自己编写部署脚本,仅在部署完成后,需要测试时触发测试job,由测试job完成测试和打分。部署脚本监听测试job的状态,测试完成后,再开始执行下个参赛者的部署流程。
自动化测试公司本来就具备完善的Robot Framework自动化测试基础设施,本次测试直接使用即可。由于部署程序已经在程序启动前完成了数据库和缓存的初始化,因此测试程序仅需读取测试数据并向Nginx发起调用即可。
由于要测试程序异常时,数据的一致性,因此要在测试开始之前开启chaos-monkey,在执行写入数据的逻辑后(即下单接口),关闭chaos-monkey,再开始查询,通过查询各个接口的数据并于写入的数据相比对,验证数据的一致性,并打分,步骤如下:
1.开启各服务的chaos-monkey功能;
2.执行写数据的测试脚本,即调用数百次下单接口;
3.关闭各服务的chaos-monkey功能;
4.执行单个数据查询接口,验证每个接口的可用性,并记录分数;
5.执行组合验证逻辑,验证多个服务的数据一致性,并记录分数。
每个参赛者的测试执行完成后,要将计算的分数写入汇总到csv文件中。拿到最终的csv文件后,即可利用excel实现按照成绩排序。
思考通过本次大练兵,有以下几点思考:
工具建设要持续投入:工具建设可使用最小的成本,获取最大的收益。此次练兵,开发部署流水线和自动化测试脚本各投入1人,仅在2周内使用业余时间就完成了开发和测试,比人工部署、演示、测试的成本要低得多。同时工具可重复执行,每次修改完后自动触发。日常的开发和测试过程应尽可能多的使用工具去做回归测试,避免人为疏忽引起的分析遗漏而没回归覆盖。
环境问题不容忽视:每个人都能在自己的环境中跑通程序,但是在评审环境中,有些程序却无法运行。因此在日常测试过程中,我们除了程序本身的正确性以外,还需关注环境差异可能带来的问题。这里顺带吐槽一下,如果公司能使用docker等容器技术,将会提升我们的版本质量,降低因环境不同而出错的概率。
规范意识有待提高:虽然题目中已经将组包格式、程序端口等做了要求,也已将注意点通知到所有人,但是还是有很多人没有遵守,导致测试程序跑分较低。这反映出大部分开发人员的特点,只管闷头写代码,却忽视了规范要求,导致日后返工,甚至产生线上故障,导致严重的后果。建议大家在日常编码之前,提前熟悉并遵守规范和要求,避免走弯路。
最后,感谢大家对我的容忍。2021,愿所有程序都不出bug!