本节书摘来自华章计算机《Web测试囧事》一书中的第3章,第3.3节,作者 黄勇 雷辉 徐潇 杨雪敏,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.3 前后台分离测试时需要注意测试隔离
小蔡测试的产品最近需要更新前后台。对于前台来说,要从之前的JavaScript转换成Angular等新技术,显示样式也要从前几年的拟物化风格转换为扁平化风格;对于后台来说,要从之前和公司内部其他产品通用的6套后台模块系统架构,转换成只包含数据库和后端服务器的2套模块系统架构,而且后台技术要用Node.js重写,如图3-5所示。
基本上这个前后台替换的任务,把整个系统都进行了替换,只是仍然保留了之前的功能。进行前后台替换的任务时间紧,所以整个项目组的开发人员被分成了两个小组,分别负责前后台的替换,每个组又临时扩充了不少别的团队的人进行协助。而测试人员,包括小蔡,还是负责整个项目的测试工作。
在替换项目准备启动阶段,两个小组都认为只要自己做自己的部分,保证原有功能的正常就可以了,两个团队并不需要过多的交流和沟通,一切以之前的系统为准。
然而项目一开始,双方团队就遇到了不少问题。
首先,两个组对同一功能前后台开发的优先级不同,造成进度不一致,导致有些模块的前后台功能不能同一时间完成。这就阻碍了集成测试的实施,让进度一拖再拖。为了减少这种情况,项目组又搭建了单独的包含以前系统后台和替换项目中前台的环境。虽然这解决了部分测试延误的问题,但是开发人员花费了不少时间来搭建环境,而且在这个环境测试完成之后,还需要在整套替换前后台的环境上再次进行集成测试。
其次,测试人员在前台发现问题时,并不能准确定位是前台团队造成的,还是后台团队引入的。而且由于不熟悉对方团队编写代码,开发人员也需要花费不少时间才能定位问题真正的原因。
整个项目组发现这两个问题耗费的时间过长,所以讨论并执行了一套方案来解决这两个问题:使用Mock服务器进行测试。
前后台团队根据定义好的API,各自编写Mock服务器,便于开发人员进行开发,和测试人员测试相对独立的模块,也大大简化了测试环境和测试执行的复杂度。具体来说,就是前台团队根据API的定义,编写Mock服务器来模拟后台数据库和服务器的返回;而后台团队根据API的定义,编写Mock服务器来模拟前台服务器的请求和预期结果,如图3-6所示。
使用Mock服务器进行测试,大大简化了测试复杂度,从测试环境上也隔离了前后台的测试,加快了测试进度。
在进一步的使用中,小蔡发现有时API接口定义的修改在前后台没有及时同步,造成了单独测试前台或者后台时没有问题,但是在进行集成时,却发生了严重的不一致。
还好小蔡之前定期跟踪测试趋势时,从ThoughtWorks技术雷达(technology radar)上了解到契约测试就是针对这种场景的一种测试方法,而且还有不少进行契约测试的工具。
简单说来,契约测试就是同时对前后台都进行了Mock,使它们随时都使用的是一致的API接口定义,也只需要维护单一的API接口。使用契约测试的工具能快速实现前后台的分离,同时保证它们的一致性,如图3-7所示。
小蔡在项目组讨论改进时提出了这个测试实践,大家都很支持,并且马上制定计划进行试验。在整个项目组尝试了一周之后,整个项目组将契约测试作为团队内很重要的实践进行推广和执行。