ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

敏捷开发中测试质量保证的实践:从质量内建到自动化分层

敏捷开发中测试质量保证的实践:从质量内建到自动化分层 这是“每天一个假设”系列的第9篇。今天想聊的话题是敏捷开发中测试质量到底怎么保证。这个问题我前后经历过好几轮实践从最早功能测试全员手工点到后来测试团队被“迭代速度”逼到崩溃再到逐步搭建起一套以自动化分层为核心、质量内建为底线的体系过程里踩过的坑比写出来的经验多得多。这篇文章我不打算讲一堆教科书理论而是从实际团队运作的角度把“敏捷测试”这对组合里真正的矛盾、可落地的做法、常见误区以及我自己的排除思路一次性讲清楚。适合敏捷团队里的测试工程师、开发工程师、项目负责人参考也适合刚从传统项目切到敏捷节奏的朋友提前避坑。1. 敏捷迭代里测试质量失守的根源1.1 速度与质量的假性对立很多人一说敏捷下意识就认为“快意味着没时间测”“测试保证质量就会拖慢迭代”。我在团队里也反复听到这种说法但深入看下去就会发现这更多是一种假性对立。敏捷周期短、交付频繁真正缺的其实不是测试时间而是测试的“确定性”。传统瀑布项目里测试在最后阶段集中爆发留给测试的窗口也是固定的敏捷迭代每两周就要出一个可交付增量测试没有大块时间做全量回归于是大家开始压缩用例范围、砍探索性测试、依赖开发自己“觉得没问题”。这种把质量寄托在运气上的做法才是质量失守的根因。我自己的体会是要想让质量和速度共存不能靠“加班多测”而要靠把质量活动拆碎、平摊到整个迭代周期里。测试不能只出现在迭代的最后两天需求澄清、开发编码、代码评审、集成验证这些环节都要有测试视角参与。只有让“质量”不再是某个阶段的任务而是所有人每天都要面对的动作速度和质量才有可能同时成立。1.2 质量被放到“最后一公里”很多团队的迭代节奏是第一天到第三天需求讲解和开发设计第四天到第七天疯狂写代码第八天到第九天联调第十天提交测试第十一到十二天测试赶工第十三天修Bug第十四天演示。这套流程看起来没什么问题但仔细一看测试其实是“最后一公里”的接盘侠。这时候只要开发稍微延期测试时间就被压缩回归只能挑重点功能点一点只要联调阶段发现接口对不上修复之后又得重新验证测试计划就彻底乱套。我见过最夸张的一次迭代最后一天下午还提了三个新功能点测试组全员加班到凌晨第二天演示还是出了问题。要打破这个局面必须把测试活动左移。需求评审阶段测试就要从“可测性”角度去挑战需求描述开发编码阶段测试就可以同步设计用例、准备测试数据、编写自动化脚本甚至在Story还没有全部完成时先对已完成的小功能点做增量验证。这样到迭代后期测试面对的不是一片空白而是一个已经持续被验证过的系统工作量自然大幅下降。1.3 自动化资产没有积累我在不少团队看到过一种普遍现象自动化测试一开始轰轰烈烈团队搭了框架、写了脚本、接上了CI跑了两周后开始各种报错用例失败没人及时修后来干脆跳过自动化继续手工回归。等到下一个迭代又开始新一轮“从零搭建自动化”。这种恶性循环的本质是没有把自动化当成一种长期资产来运营。自动化用例和业务代码一样需要维护需要配套的数据、环境、执行策略需要在CI上持续跑并且有人认领失败用例。不做这些自动化规模越大维护成本越高最后一定会被团队抛弃。敏捷开发里的自动化不同于传统项目的一次性活儿它要求每个迭代都有一部分“存量自动化用例”在守护回归安全网。哪怕这个迭代没有新功能开发存量用例也要定期运行、更新确保和代码保持同步。这个意识没建立起来后面所有环节都会变得被动。1.4 质量标准模糊、口径不统一还有一个特别容易被忽略的问题团队对“质量好”的定义可能完全不一致。开发认为登录功能能跑通就是好测试认为边界条件、异常流程、兼容性都要覆盖才叫好产品经理可能只看演示环节是否顺畅。我经历过一次需求验收争议开发提交一个用户列表页面说“功能完成”。测试按照接口文档和数据校验规则测了一遍发现翻页参数极端情况下会导致查询报错于是提了Bug。开发说“正常用户不会这么用”测试说“这是明显的健壮性问题”。双方僵持不下最后产品经理出来打圆场说“先上线后续再优化”。这类问题表面上是技术分歧实际上是缺少一致的质量标准。衡量标准不能靠个人感觉而应该体现在用户故事里体现在完成的定义中。需求里没有写清楚“列表超过1000条时如何展示”“网络断开时用户看到什么”开发和测试就必然有不同的理解。质量保障的第一步是让所有人对“做完了”这件事有相同的定义否则后面所有努力都会因为口径不一致而变得没有意义。2. 质量内建把测试左移到需求与开发的源头2.1 故事卡里的验收标准要可测敏捷开发里需求通常以用户故事User Story的形式存在。但我发现很多故事卡只有一句话描述“作为用户我希望能够导出报表以便我看到数据”。这句描述没有告诉我们导出格式是什么、字段有哪些、数据量多大时不能超时、权限如何控制。结果就是开发按自己的想法做测试按自己的理解测产品在评审时才发现对不上。要让测试质量有保障用户故事必须包含可验证的验收标准AC。比如导出报表这个故事可以拆成支持CSV和Excel两种格式包含当前筛选条件下的全部字段超过10万条数据时给出导出任务提示而不是卡死页面无权限用户点击导出时提示“请联系管理员”。这些标准一旦写入故事卡测试就能直接转换成用例开发编码时也有了明确的目标。实操上我建议测试在迭代计划会前先读一遍故事卡把模糊的描述标出来在计划会上直接提问。不要让“验收标准”成为事后补写的文档而是成为故事卡的一部分。写过几次之后产品经理和开发也会慢慢养成习惯写出来的需求越来越具象测试用例设计难度会明显下降。2.2 DoR与DoD用清单锁住质量底线敏捷开发中有两个关键概念一个叫Ready就绪一个叫Done完成。Ready是故事进入迭代前必须满足的条件Done是故事被认为真正完成时必须满足的条件。很多团队只关注迭代排期忽略了这两个清单导致半成品流入迭代、未验证的代码被当成完成。我在团队里推过一份简单的DoD清单每个故事卡标记完成前必须满足代码已提交并通过CI构建单元测试覆盖率不低于80%接口测试用例通过无阻塞级缺陷UI验收通过更新了必要的用户文档。这里面每条都需要测试参与设定和验证。有了这份清单测试就不需要靠“催”来推动开发收尾而是拿着明确的标准去逐项核对。DoR也要同步定义比如故事在进入迭代前必须有明确的验收标准和相关数据说明避免开发做了一半才发现需求缺失。我见过团队因DoR缺失导致整个迭代返工的情况故事只说“增加搜索功能”但没说搜索范围、搜索字段、匹配规则开发按全字段模糊搜索实现产品要求按标题精确匹配结果一周白干。DoR的目的就是避免这种浪费。2.3 单元测试先行开发与测试的第一次握手说到单元测试很多人觉得这是开发的事跟测试没关系。但实际上单元测试是整个质量保障体系的基石也是开发自测能力最直接的体现。如果开发写完代码连基本的单元测试都不写把最基础的分支逻辑、异常路径都丢给后端测试去发现那测试就永远在“接漏水的桶”。我在团队里推过一段时间TDD测试驱动开发的实践虽然没做到全员严格TDD但至少让核心业务模块都具备完善的单元测试。操作方法很简单开发在动手编码前先根据验收标准列出关键测试用例然后写最小实现让用例通过。测试工程师在这个阶段可以辅助开发对齐用例设计尤其是边界条件和异常输入帮助开发把问题消灭在萌芽阶段。单元测试先行的好处不止是减少低级Bug还在于它能推动代码结构优化。一个无法被单测的模块往往意味着代码耦合太高、职责不清晰测试难度本身就是代码坏味道的信号。所以我把单元测试看作开发与测试的第一次握手测试帮开发梳理可测性要求开发通过单测改善代码质量双方在这个环节的协作直接决定了后续集成测试的顺畅程度。2.4 接口测试在联调前铺路接口测试的价值怎么强调都不为过。我在前面提到的那个晚上加班到凌晨的案例根子就在于前后端联调开始得太晚接口问题大量积累最后集中爆发。后来团队把接口测试提前到开发阶段前后端联调才开始变得顺畅。具体做法是后端接口开发完成后立刻用接口测试工具或自动化脚本对每个接口做冒烟级验证包括正常参数、异常参数、鉴权缺失、数据边界等。这类接口测试脚本不依赖前端页面执行速度快可以在CI上频繁运行。只要接口层面稳定了后面页面联调、UI测试的风险就会小很多。我建议接口测试用例设计时重点关注三方面一是参数校验包括缺参、多参、类型错误、超长字符二是业务规则校验包括状态流转、权限控制、字段关系三是异常路径包括超时、外部依赖失败、并发冲突。这些用例不需要等到全部模块完成后再写可以在接口定义确定后就开始准备。等到迭代后期接口测试已经成为一套可以随时回归的资产测试人员就能把精力放到真正需要人工判断的场景上。3. 自动化测试怎么搭才不会白做3.1 测试金字塔的落地比例自动化测试最经典的分层模型是“测试金字塔”底层是大而全的单元测试中间层是接口测试顶层是少而精的UI/端到端测试。很多团队一提到自动化就只想到UI自动化一上来就用Selenium录制脚本点上几个页面结果维护成本飙升跑一次花一两个小时还经常因为前端小改动就挂一片。我倾向于按一个相对务实的比例来规划自动化资产单元测试占60%~70%接口测试占20%~30%UI自动化占5%~10%。这个比例不是拍脑袋定的而是基于稳定性和成本考虑的。单元测试执行快、定位准、依赖少适合高频运行接口测试比单元测试更贴近用户场景又比UI测试稳定UI自动化最贴近真实操作但最脆弱、最耗时所以只覆盖关键用户主流程。如果你团队自动化刚起步资源有限我的建议是先集中力量把接口自动化做扎实UI自动化选两三条核心业务链路跑通即可。很多质量风险在接口层就能拦截没必要让脆弱的UI脚本承担所有回归任务。3.2 分层自动化工具选型思路工具选型其实不该一上来就纠结于“哪个工具最强”而要看团队语言栈、现有基础设施和维护成本。单元测试层面Java项目基本就是JUnit或TestNG配JaCoCo看覆盖率Python项目用pytest配合Allure出报告前端项目可以用Jest或Vitest。这个层面工具选择已经很成熟关键是让开发养成习惯。接口自动化层面工具选择更多。如果团队以Java为主可以选RestAssured配上TestNG如果以Python为主requests库加pytest就是一套很轻的框架如果不想写太多代码Postman的Collection测试脚本也能满足早期诉求配合Newman可以在CI里跑。另外像Apifox这类国产工具把接口文档和自动化测试合在一起小团队上手非常快。我自己的习惯是优先选团队能长期维护的方案而不是选功能最全的方案。工具再强没人维护也白搭。UI自动化层面Web端目前还是Selenium或Playwright更主流Playwright在稳定性、自动等待、多浏览器支持上比Selenium体验好不少移动端可以考虑Appium但Appium的环境搭建和运行成本都比较高一定要评估好投入产出比再决定要不要上。3.3 接口自动化是性价比之王如果只能选一个自动化方向投入我会毫不犹豫推荐接口自动化。理由有三条一是接口用例执行速度快一个几十个接口的自动化套件跑完通常只需要几分钟适合高频回归二是接口用例稳定性高不依赖前端界面变动前端不管怎么重构只要接口契约不变用例基本不用改三是接口用例能拦截大部分核心业务逻辑问题比如权限控制、参数校验、数据状态流转。我曾经带过一个项目功能测试用例有500多条手工回归需要两天。后来我们把核心流程涉及的100多个接口写成自动化用例执行时间压缩到10分钟内每个迭代结束前至少跑3遍。效果非常明显上线后的缺陷逃逸率从早前的8%左右降到了2%以下而且测试团队终于有时间去做探索性测试而不是反复点那几个页面。做接口自动化有几个细节要特别注意。第一测试数据要尽量独立每个用例不要依赖其他用例的运行结果否则一旦执行顺序变化就会连带失败。第二断言不要只检查响应码200还要校验关键字段、响应体结构、状态码语义只断言200很容易漏掉业务逻辑错误。第三接口自动化要接进CI流水线所有成员提交代码后自动触发这样才有“持续验证”的意义。3.4 Web端与移动端UI自动化的取舍UI自动化是大家最向往也最容易翻车的方向。我在项目里见过太多因为UI自动化搞得团队筋疲力尽的案例脚本写了一两百条每次迭代跑一遍要一两个小时稍微改个按钮样式就挂掉一片维护成本比手工测试还高最后团队得出一致结论“UI自动化是个坑”。UI自动化真正的使用场景应该是那些高频、核心、跨模块的主流程验证比如登录、下单、支付、退款这类路径。这类场景改动频率相对低失败时重要性高值得用自动化去守护。至于低频功能、大量复杂交互、字段组合多变的页面自动化投入成本远大于收益手工测试更合适。移动端自动化要注意设备兼容性问题。同一套用例在不同屏幕尺寸、系统版本上执行结果可能完全不同所以我建议移动端UI自动化优先覆盖主流真机/云真机比如Android的Top5机型、iOS的Top3机型不要追求全机型覆盖。条件允许的话把UI自动化放在夜间定时执行第二天早上查看报告比在白天迭代过程中打断式地执行体验好很多。3.5 用例维护的工程化手段自动化用例最大的敌人是“不稳定”。用例跑挂了第一反应不是“系统出了Bug”而是“脚本是不是又抽风了”这种信任危机一旦蔓延自动化方案就离废弃不远了。我总结了几条降低维护成本的手段实践下来很有效。第一把用例按模块、按优先级分组核心用例和普通用例分开管理平时跑核心组迭代发布前跑全量。第二给用例设计可复用的封装层页面元素、接口请求、测试数据都封装成公共方法页面局部改动时只改封装层不用动每一条用例。第三建立失败用例自动重试机制但要设置上限比如失败后自动重跑1次如果还失败就判为真失败避免把真正的Bug掩盖过去。第四定期清理无效用例尤其是已经下线功能的用例留着只会拖慢执行时间、增加噪音。我之前在一个项目里试过一种做法每次迭代结束后测试团队花30分钟集体review最近一周自动化用例的执行结果把连续失败超过3次且无人处理的“僵尸用例”直接标记废弃。慢慢地用例集质量越来越高执行结果的可信度也回来了。4. 迭代内的测试节奏与CI质量门禁4.1 每日构建中的自动化回归设计在敏捷迭代里测试不能只等到迭代结束才行动。更合理的做法是把回归测试拆成每日常规动作。代码一提交CI就自动触发单元测试、静态检查和接口冒烟用例这些是“快速反馈回路”每日凌晨再跑一次完整的接口自动化和核心UI自动化给团队第二天早上一份质量报告。这样设计的好处是问题往往在发生的当天或当晚就会暴露而不是积压到迭代结束才被测试发现。我在实践中把这个机制称作“质量门禁”每个环节的自动化测试通过之后代码才允许进入下一个阶段。比如单元测试不通过代码不允许合并到主干接口冒烟不通过构建不允许出包。门禁一旦建立质量下限就被系统兜住了而不是靠人肉提醒。千万不要一上来就把所有自动化用例全塞进提交触发的流水线里。提交触发阶段只跑快速、稳定的用例耗时长的完整回归放到定时任务里否则开发每次提交都要等半小时出结果团队很快会怨声载道甚至绕过CI直接合并代码。4.2 迭代演示前的测试准出标准迭代最后一天的演示是团队向产品方展示成果的关键时刻也是检验测试质量的一个重要窗口。很多团队在演示前还在手忙脚乱地修Bug演示现场翻车甚至临时跳过某些功能展示原因就是没有明确的“测试准出标准”。我在团队里会提前在迭代计划会上先定好“这个迭代演示哪些功能、验收标准是什么”然后测试根据这个范围做重点验证。演示前48小时必须完成这个范围内的全流程验证和核心回归演示前24小时所有阻塞级缺陷必须清零演示前最后一轮就算还有低优先级问题没修也要保证演示路径不出现明显偏差。准出标准不一定是所有用例全部通过但至少要满足两个条件绝对不允许有阻塞级Blocker问题影响演示核心链路用例通过率必须达到90%以上。这两个数字写进团队的迭代完成定义后测试就不用每天被追问“到底能不能演示”而是可以理直气壮地拿数据说话。4.3 探索性测试留给“人”的时间自动化能覆盖大量重复性验证但它替代不了人的直觉和创造力。探索性测试就是专门留给“人”的那部分时间测试人员基于对业务的理解不受预设用例限制地去尝试各种路径、组合和边界场景。敏捷迭代周期短如果时间全被自动化准备和手工执行占据探索性测试就会被牺牲掉而很多深层次问题恰恰是在探索中发现的。我们团队的做法是每个迭代预留半天到一天的探索性测试时间。测试人员会针对本迭代的新功能做“目标导向探索”记录下探索思路、发现的问题、可能的改进点最后把有效发现沉淀成新的自动化用例或测试数据。有一次测试人员在一个老功能的下载流程里试着在点击下载后立刻断开网络再恢复结果发现数据文件和界面上显示的总量对不上这个场景在普通用例里绝对不会覆盖到但在生产环境用户很容易触发。要保证探索性测试的效果建议提前给测试人员提供明确的功能范围和背景信息告诉他们对哪些模块产生了变化、哪些逻辑最容易出问题。没有方向地乱点一气只会浪费时间很难产出高质量发现。4.4 质量度量用数据而不是感觉敏捷开发中测试质量到底好不好不能靠“我感觉这版本比上版稳定”这种定性判断要有量化的度量指标。我常用且觉得最有效的是这几个首先是缺陷逃逸率也就是线上或UAT阶段发现的缺陷占全部缺陷的比例这个数能反映测试覆盖的完整度其次是测试用例通过率以及自动化用例的稳定率还有功能覆盖率即已测试需求点占全部需求点的比例。这些指标不是为了考核KPI而是为了让质量状态透明。迭代回顾会上把缺陷逃逸率和缺陷类型分布拿出来看团队很快就能定位问题集中点是底层逻辑缺陷还是前后端接口不一致还是需求理解偏差。然后用数据倒推流程改进的方向这才是度量的意义。刚开始设计度量时别贪多先盯住一两个核心指标比如缺陷逃逸率、自动化用例稳定率。跑两三个迭代后再根据团队情况增加指标。指标越多团队越容易陷入数据游戏反而忽略了真正要解决的问题。5. 团队协同与质量文化5.1 让开发先自测Smoke Test清单敏捷团队里测试与开发最忌讳的关系是开发只管写代码写完就“扔”给测试测试发现问题再打回去。这种接力赛模式不仅效率低下还容易让开发形成“质量问题反正测试会把关”的依赖心理。我在团队里推动的第一件事是建立开发自测的Smoke Test清单。清单内容必须简单、可执行通常包括新增功能的“快乐路径”能走通、关键异常分支有反馈、已有功能没有出现明显回归尤其是主流程、前端页面的关键交互没有明显报错。开发提交代码前先对照清单自测一遍确认没有问题再提测。这个动作看着简单实际能挡住大量低质量提测。测试在收到提测请求后也应该先跑一遍快速冒烟而不是直接一头扎进全量用例里。冒烟不通过测试可以合理拒绝这个版本的正式测试直接退回给开发。这是保护测试资源、维护质量底线的重要手段一开始可能会有人觉得不近人情但坚持几个迭代后提测质量会明显提升双方协作也会顺畅很多。5.2 测试开发结对从提缺陷到共同修复结对编程在敏捷开发里很常见但测试和开发结对的现象还比较少见。我试过几次效果超出预期。测试与开发结对时测试不再是等东西建好后才开始测而是在开发写代码的过程中就已经在理解实现逻辑、评审测试点、和开发确认边界情况。有一次测试和开发结对写一个支付回调的逻辑测试在开发过程中就发现回调接口成功和失败的响应结构没有区分开会给后续状态判断带来隐患。如果是传统流程这个问题要到联调阶段才会暴露开发和测试都要花时间排查。结对后问题在写代码的时候就解决了。结对不是为了形式而是为了建立共同的质量目标。测试可以从用户视角挑战设计开发可以从技术实现上解释约束双方在对话中把质量风险提前消化掉。这种方式不需要每天做在核心复杂模块或者需求变更频繁的阶段拿出一两天试点就能看到效果。5.3 缺陷分析与缺陷逃逸率我发现很多团队开Bug评审会时只是把Bug逐个过一遍分配责任人、定优先级、然后结束。其实这样浪费了一个很好的质量改进机会。每次迭代结束后我都建议花一点时间对缺陷做一个结构化的复盘这个缺陷是在什么阶段引入的是测试漏掉了还是自动化没覆盖还是开发对需求理解错了还是需求本身就存在模糊地带。缺陷逃逸率是一个很有用的复盘指标。比如这个迭代总共发现了30个缺陷其中5个是在线上或验收阶段才被用户发现那么缺陷逃逸率就是16.7%。这个数字偏高说明测试覆盖存在明显盲区或者某些模块的测试深度不够。持续追踪逃逸率的变化可以清楚地看到质量是变好还是变差。只统计数字还不够要结合缺陷类型一起分析。如果逃逸的都是同一类问题比如“边界值未处理”那就说明团队在用例设计时普遍缺乏边界值意识解决办法是补充对应模块的测试用例设计模板或者增加静态分析和代码检查规则而不是笼统地要求“加强测试”。5.4 质量不是测试一个人的事这是我最想强调的观点质量是团队共同的责任不是测试部门独有的事。产品经理、开发、设计、运维每个角色都在影响最终交付质量的某个方面。产品需求有歧义开发实现有偏差设计方案没有考虑异常场景运维发布时配置出错这些都是质量问题的来源不能都让测试兜底。敏捷开发中尤其如此。测试要在用户故事成型时介入开发要对单元测试质量负责产品经理要关注验收标准是否可测运维要保障测试环境稳定。把质量责任分散到整个流程中测试才能从“守门员”转型为“质量教练”。我在团队里推动过一个做法迭代回顾会上每个人轮流回答“这个迭代我为质量做了什么贡献”。这个动作听起来有点形式化但坚持几轮之后大家的质量意识真的会不一样。开发会主动提及自己为重点模块补了多少单测产品经理会反思自己有没有更早提供清晰的验收描述测试也会更注重用例设计而不只是执行。质量文化的建立靠的就是这样一次次微小的改变。6. 常见问题与排查技巧实录6.1 自动化用例“闪红灯”Flaky测试处理自动化测试跑起来后最让人头疼的就是“一会儿过、一会儿挂”的Flaky测试。用例本身没有断言错误但每次执行结果都不一样这种不稳定性会严重消耗团队信任。我遇到过最典型的例子是一个UI自动化用例在等待某个元素加载时有时候3秒能出来有时候要10秒固定等待5秒就会偶发失败。解决Flaky测试先要知道哪些用例不稳定。我把CI里的执行结果按失败率做了个统计连续跑10次有超过2次失败的用例都标记为“疑似Flaky”然后逐一分析原因。常见原因有几个测试数据没有隔离导致相互影响前后端异步请求导致等待时机不对测试环境响应慢导致超时还有页面元素定位不唯一或属性变化。针对异步等待问题我建议把所有固定sleep改成显式等待或智能等待轮询元素的预期状态而不是空等固定时间。针对数据污染问题每个用例尽量在setup阶段重建自己的数据跑完再清理避免依赖其他用例留下的脏数据。Flaky用例一定要优先处理不能想着“等等看再说”。不稳定的用例不仅浪费执行时间还会让团队习惯性忽视失败结果真正的Bug反而可能被当成“又闪红”而被漏掉。6.2 环境与数据污染做过测试的都知道测试环境不稳定、测试数据混乱是最影响效率的隐形杀手。有一阵子团队自动化用例频繁失败但不是代码问题而是测试环境上老数据没有清理前后端联调时有人改了公共配置没通知第二天所有用例都跑挂。排除了半天才发现环境变量被接入了不同的第三方模拟服务接口返回的数据格式对不上。我后来立了几条规矩。第一条测试环境和测试数据库必须独立不能和开发联调环境混用第二条任何环境变更都要在团队群里发布通知并且写进变更记录第三条测试数据准备脚本化用固定的数据集初始化数据库每次跑完用例后可以快速恢复基线。这个基线数据要尽量小而完整包含各类边界情况的记录能支撑所有核心用例的执行。环境问题往往不是一次性彻底解决的但我们可以通过记录和复盘把常见环境故障整理成一个排查清单。比如接口超时先检查网络和代理登录失败先检查鉴权服务是否正常数据异常先检查数据库连接和初始化脚本。有了清单新同事遇到类似问题时也能快速定位不会一上来就怀疑被测代码本身。6.3 需求变更导致用例大面积失效敏捷开发中需求变更是常态但这个常态对测试用例的冲击非常大。一个页面字段名称改了对应的UI自动化脚本可能就要改十几处一个接口参数结构调整接口自动化用例可能要重写一部分。如果用例设计不够灵活需求变更后维护成本会成倍增长。我的应对策略是隔离变化。页面元素的定位尽量放到单独的页面对象层业务逻辑的断言尽量基于稳定的业务规则而不是具体的文案或界面元素。比如要断言“用户登录成功”就不要去检查某个按钮上是否显示“欢迎你”而是去校验登录后返回的token或者页面跳转的URL。这样即使界面上改了很多文案自动化脚本依然能稳定运行。需求变更时我还习惯在迭代回顾会上同步回顾用例的变更规模和耗时。如果每个迭代都有大量时间花在用例修改上那要反思是不是用例封装粒度不够、测试数据耦合太重或者是否过早地对不稳定的界面做了UI自动化。及时调整自动化策略避免陷入“为自动化而自动化”的陷阱。6.4 时间被压缩时的优先级策略迭代延期是常态测试时间被压缩也是常态。在这种场景下考验的不是测试有多能熬夜而是有没有一套清晰的任务优先级策略。我的原则是保住核心链路再做异常场景最后才考虑边角功能。自动化回归优先跑覆盖核心业务的策略集探索性测试优先覆盖本迭代新增和变更的功能手工验证优先保证演示路径不出问题。用了这套策略后即使时间再紧我们也能明确告诉团队核心的登录、下单、支付流程验证过了风险可控但某些低频的边缘功能没有来得及深测需要发布后重点监控。这种“带着风险清单上线”的做法远比假装“全测完了”更专业、更容易获得信任。时间压缩时还有一个容易被忽略的点不要把测试人员的精力全耗在重复性回归上。如果核心流程已经有接口自动化守护这时候可以放心地跳过手工全量回归把人力集中在自动化没覆盖到的地方比如需求理解、用户体验、异常场景探索。自动化真正解放了测试之后测试才有余力去应对这种突发状况。在我自己带过的团队里吧测试质量提升从来不是测试一方拼出来的而是靠流程、工具、数据和协作一点点堆起来的。刚开始推进质量内建和自动化时团队里确实有人觉得“太麻烦”“不如多测几遍”但坚持两三个迭代之后大家逐渐尝到了甜头回归时间短了、上线前不慌乱了、线上问题变少了那时候才真正理解所谓敏捷的高效其实是建立在质量可控的前提之下的。如果你正在为敏捷迭代里的测试质量发愁建议先从两件事入手一是把DoD和DoR两个清单真正跑起来让“做完了”的定义清晰透明二是挑一条核心业务链路先做出接口自动化接进CI每天跑。跑通这两个动作之后你会发现测试质量不再是靠透支身体和运气来保障的而是变成了团队日常协作的自然结果。这大概是敏捷开发里测试最舒服的一种状态了吧。
返回列表