智汇 IT
城启新篇

自动化测试中的环境治理 别让测试跑在沙地上

上周跟某互联网公司的测试组负责人吃大排档,他撸串撸到一半突然叹气,说前一周跑全量自动化,3200条用例通过率才11%。团队熬了两个通宵排查,一半用例的失败原因都离谱到想笑——数据库里混着上个月的大促脏数据,配置中心的服务地址指到了预发环境,甚至还有个服务的端口被人临时改成了调试用的8081,改完忘了改回来。

很多人觉得环境治理就是搭好一套和生产配置差不多的环境,把自动化用例往上一放,就能跑出可信的结果,根本没意识到环境从搭好的那一刻起,就一直在不受控地漂移。90%的自动化测试无效失败,根源都不在用例本身,而在环境的状态漂移。

环境不是搭完就完事的租来的房子


不少团队对测试环境的认知,还停留在“一次性交付”的阶段。开发把服务部署上去,跑通个冒烟用例,就算完成任务,剩下的全甩给测试组。没人管后续的版本变更,没人管配置的修改,甚至连谁往环境里加了调试代码都没人知道。

自动化测试环境多节点配置拓扑图
自动化测试环境多节点配置拓扑图


真的,我见过太多团队在这上面踩坑。有个做电商的团队,自动化跑了大半年,结果发现测试环境的支付服务一直跑的是三个月前的分支,所有和支付相关的用例,不管怎么改,通过率都是100%——因为根本没连到最新的代码。这种自动化跑了也是白跑,结果一点参考价值都没有。

那些藏在缝隙里的环境污染来源


你可能会问,环境的污染到底都是从哪来的?

最常见的就是调试残留。开发为了复现某个bug,直接在测试环境的数据库里改了个用户的权限字段,改完忘了删;或者为了验证某个接口的超时逻辑,临时把超时时间从3秒改成10秒,压测完就撤,根本没改回去。这种零散的、无记录的修改,是环境漂移的最大来源。

还有并行任务的互相干扰。好几套自动化测试任务跑在同一套环境上,你清你的测试数据,我改我的配置,跑着跑着就乱了。比如A任务要测未登录状态的接口返回,B任务刚好往缓存里塞了个登录态的token,两个任务撞在一起,用例说挂就挂,查都查不出来原因。

测试环境数据污染流向排查流程图
测试环境数据污染流向排查流程图


我之前蹲过一个测试组的工位,看他们排查这种问题,翻了三个小时的操作日志,就为了找是谁上周三下午四点改了Redis的过期时间。那种崩溃的感觉谁经历谁知道。

还有个容易被忽略的点,就是环境的版本不一致。测试环境用的MySQL是5.7,生产是8.0;测试环境的Nginx配置是简化版,生产加了三层缓存。这种差异带来的问题,自动化用例根本测不出来,等到上了生产才发现,已经晚了。

治理不是堆工具是给环境装个“体检仪”


一提到环境治理,很多人第一反应就是买工具。容器编排平台、配置中心、数据管理系统,买了一堆,最后全落灰。不过话说回来,不是说工具没用,是很多人搞反了因果——先买工具,再想怎么用,最后工具成了摆设,问题一点没解决。

说白了,环境治理的核心不是把环境锁死,是让所有对环境的修改都可追溯,可回滚。环境治理的本质是给所有对测试环境的修改建立“实名登记簿”。谁改的,改了什么,为什么改,改完之后有没有验证,所有记录都留痕,出了问题能顺着记录倒推。

现在不少团队的做法其实很实在。给每个测试环境做定时快照,每次自动化跑之前,先把环境恢复到上一次验证过的干净状态,跑完之后再把产生的脏数据自动清掉。还有的给环境加了健康检查脚本,每天定时跑——检查核心服务的版本是不是和当前迭代一致,配置中心的地址对不对,数据库的表结构有没有变更,有问题直接发告警,不用等自动化跑挂了才反应过来。

有人说,那把环境锁死,谁都不能改,不就没这些问题了?想都别想。测试本身需要往环境里造测试数据,开发也要在上面调试bug,完全锁死根本没法干活。临时修改要有有效期,到点自动回滚,永久变更要走审批,同步到所有相关的环境配置里——这才是能落地的规则,不是那种一刀切的死规定。

上次那个撸串叹气的测试负责人,后来他们花了两周时间,把所有测试环境的变更记录梳理了一遍,给每个环境加了自动快照和每日健康检查。现在自动化的无效失败率降到了3%以下,他说终于不用天天当环境侦探了。

真的,自动化测试这东西,从来不是把用例写好就能跑通的。你脚下的环境稳不稳,直接决定了你跑出来的结果到底有没有用。
免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:自动化测试中的环境治理 别让测试跑在沙地上
文章链接:https://m.itcdj.com/news/773.html