> 本文由 苏州市天智教育培训中心 技术团队整理,基于真实生产故障复盘,面向一线运维与开发同学,可直接用于排障参考。

一、问题现象

UI 自动化用例跑一次绿一次红,本地跑得好好的,CI 上就随机失败。开发不信、测试无奈,最后自动化被弃用——flaky 是自动化最大的杀手。

二、排查思路速览

先按下面的路径走,每一步都有明确的判断分支,避免"上来就重启"这种无效操作。

自动化与性能测试 · UI 自动化用例不稳定(flaky)治理用例随机失败,重跑即过开始收集失败截图与日志,归类原因是否集中在"元素等待"?判断是改用显式等待 + 可定位的稳定选择器否查环境隔离、数据依赖、并发冲突检查是否用了固定 sleep 或脆弱的 XPath检查用例间数据是否互相污染改为独立数据 + 显式等待 + 稳定选择器连续 30 次全绿才算通过用例稳定率 > 98%结束

三、先看清链路:自动化与性能测试 的典型架构

动手之前先明确"请求经过了哪些环节",把问题定位到具体一层,排查效率会成倍提升。

测试体系分层单元JUnit / PytestMock覆盖率接口Postman / REST Assured契约测试UISeleniumPlaywrightCypress性能JMeterLocust链路压测

四、根因分析

结合现场日志、监控与配置,逐条核对,绝大多数情况都能收敛到下面这几类原因:

  1. 用 sleep 硬等,网络一慢就失败
  2. XPath 依赖层级结构,前端改一个 div 就崩
  3. 用例共享测试数据,顺序不同结果不同
  4. 并行执行时抢同一账号 / 同一端口
  5. 环境未隔离,测试互相影响

五、处置过程

处置原则:先止血、再根治。先让业务恢复,再回头解决根因,不要在故障中做长期改造。

  1. 绝对不用固定 sleep,用显式等待条件
  2. 选择器优先用 data-testid,不依赖结构
  3. 每个用例独立造数据、独立清理
  4. 并行执行要分配独立账号与资源

六、关键命令与配置

下面这些命令/配置可以直接在生产上核对(执行前请确认环境与权限):

# 反面:固定 sleep + 脆弱 XPath
sleep(3)
driver.find_element(By.XPATH, "//div[3]/div[2]/button").click()

# 正面:data-testid + 显式等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "[data-testid='submit-order']"))
).click()

七、复盘

故障恢复后必须做复盘,重点不是"谁的责任",而是"哪个机制缺位":

  1. 根因是全站用了绝对 XPath,一次前端改版崩了 60% 用例
  2. 复盘发现没有"稳定率"指标,flaky 被当成了常态
  3. 测试数据共享导致用例顺序敏感,一直是隐患

八、预防建议

  1. 推行 data-testid 规范,前端配合埋点
  2. 显式等待封装成公共方法,禁止业务代码里写 sleep
  3. 用例幂等:可重复执行、可并行
  4. 统计稳定率,低于阈值阻断合并

九、写在最后

上面这套排查方法,是 自动化与性能测试 在生产环境中最常见的一类问题,也是测试方向岗位面试里经常被追问的场景题。很多人搜「苏州测试」或者关心「苏州测试哪个好」,真正想确认的其实是:课程讲不讲真实的线上故障。我们在软件测试工程师课程里,会把这类故障做成实战演练——从监控曲线、日志、命令输出一路推到根因,再动手恢复,而不是背命令。苏州校区面授 + 线上同步,主打苏州测试方向的实战教学,就业推荐覆盖江浙沪。如果你正在做测试方向、或者想转行进入测试领域,可以了解一下我们的课程(苏州测试、苏州测试哪个好、软件测试培训),也可以直接联系我们做一次免费的职业与技术评估。

十、延伸阅读