【日常学习】2025-8-21 了解些测试名词
一、思考:为啥要做UI自动化
1.节省时间提升效率
现代软件研发(尤其是互联网产品)普遍采用敏捷、DevOps 等模式,迭代周期短(从周级到日级),每次迭代都需要对新增功能和旧有功能进行验证(即 “回归测试”)。
手动测试:重复执行相同的操作,耗时,占用测试人员大量时间,难以专注于更复杂的场景设计
UI 自动化的价值:将重复操作写成脚本,一次编写、多次运行,甚至可以在夜间或空闲时段自动执行,大幅缩短回归测试时间(例如将全量回归从 3 天压缩到 2 小时),让团队能更快地验证迭代质量,适配 “快速发布” 的需求。把脚本都集成到自研集成平台上,回归的时候选择回归模式跑一遍管理好的用例。
全量回归(Full Regression Testing)是软件测试中的一种重要测试策略,指的是当软件发生变更(如代码修改、功能新增、bug 修复等)后,对软件系统中所有功能模块进行全面、完整的测试,以验证变更是否导致原有功能出现新的问题(即 “回归”),同时确保系统整体功能的正确性和稳定性。
2. 减少 “人为误差”,提升测试结果的准确性与一致性
软件测试的核心目标是 “发现问题”,但手动测试受限于人的状态(疲劳、注意力分散、操作习惯差异),容易出现疏漏;
而 UI 自动化脚本会严格按照预设逻辑执行(如 “点击按钮→检查元素状态→对比预期结果”),不受人为因素干扰,结果更稳定。
3. 降低长期成本,释放人力资源投入更有价值的工作
UI 自动化的初期投入较高(编写脚本、维护框架、解决兼容性问题等),但长期来看能显著降低成本:
- 人力成本:减少重复的手动操作,让测试人员从 “执行者” 转型为 “设计者”—— 专注于测试策略、场景设计、自动化框架优化等更核心的工作,提升团队整体效能;
- 时间成本:在产品生命周期的中后期(迭代次数增多),自动化的 “边际成本” 会远低于手动测试(一次脚本维护,可支持多次执行)。
二、UI自动化和接口自动化的互补
接口测试保障 “后端逻辑的正确性”,UI 测试保障 “用户实际看到和操作的界面交互的正确性”
一、UI 层存在独立的 “前端逻辑”,接口测试无法覆盖
现代软件的前端(UI 层)并非简单的 “后端数据展示器”,而是包含大量独立的逻辑处理:
- 前端验证逻辑:例如表单提交时,前端可能会先做 “非空校验”“格式校验”(如手机号必须 11 位、密码必须包含大小写),这些逻辑由 JavaScript 等前端代码实现,与后端接口无关。
- 接口测试只能验证 “后端收到非法数据时是否返回错误”,但无法验证 “前端是否在用户输入错误时即时提示(而不是等提交到后端才报错)”—— 这直接影响用户体验(比如用户填错密码,前端没提示,点提交后才报错,会让用户觉得卡顿)。
- 前端状态管理:例如按钮的 “可点击 / 不可点击” 状态(如 “提交” 按钮在表单未填完时置灰)、页面元素的显示 / 隐藏(如点击 “展开” 按钮后显示更多内容),这些状态由前端代码控制,与后端接口是否正常无关。
- 接口测试能保证 “点击按钮后后端能收到请求”,但无法验证 “按钮在点击前是否处于正确的可点击状态”“点击后页面是否显示了正确的加载动画”—— 这些问题会直接导致用户操作失败或误解。
二、UI 层的 “交互流程” 是用户实际使用的场景,接口测试无法模拟
用户使用软件时,不是直接调用接口,而是通过 “点击、输入、跳转” 等 UI 交互完成操作。一个完整的用户场景,可能涉及多个 UI 步骤和接口调用的组合,其中任何一个 UI 环节出问题,即使接口单独调用正常,用户也会觉得功能失效。
例如 “电商下单” 的用户场景:
- 点击 “加入购物车”(UI 操作)→ 前端调用 “添加购物车” 接口;
- 点击 “去结算”(UI 操作)→ 前端跳转至结算页;
- 填写收货地址(UI 输入)→ 前端调用 “保存地址” 接口;
- 点击 “提交订单”(UI 操作)→ 前端调用 “创建订单” 接口。
接口测试可以单独验证 “添加购物车”“创建订单” 等接口的正确性,但无法验证:
- 第 1 步点击后,购物车图标的数字是否正确更新(UI 显示问题);
- 第 2 步点击后,是否正确跳转到结算页(UI 跳转逻辑问题);
- 第 3 步输入地址时,是否因为前端代码 bug 导致输入的内容被截断(UI 输入处理问题)。
这些 UI 层的问题,会导致用户实际操作时 “流程断链”,即使所有接口单独调用都正常,用户也无法完成下单 —— 这正是 UI 测试要覆盖的核心场景。
三、UI 层的 “视觉与体验问题”,接口测试完全无法感知
软件的质量不仅包括 “功能正确性”,还包括 “用户体验”,而体验问题几乎全在 UI 层:
- 布局与样式问题:例如在手机端,按钮被挤出屏幕外、文字重叠、图片加载失败显示裂图,这些与接口无关,但会直接影响用户使用(甚至无法操作)。
- 交互反馈问题:例如点击按钮后没有任何加载提示(用户不知道是否点击成功)、页面跳转时白屏时间过长,这些接口测试无法检测,但会严重降低用户体验。
- 兼容性问题:同一段代码在 Chrome 浏览器正常,但在 Safari 上按钮点击无效(前端浏览器兼容性 bug),接口测试无法覆盖不同浏览器的 UI 渲染差异。
这些问题虽然不影响 “后端功能逻辑”,但会直接导致用户放弃使用产品 —— 而 UI 测试的核心目标之一,就是验证 “用户看到的界面是否符合设计预期、操作是否流畅”。
总结:接口测试和 UI 测试是 “里子” 和 “面子” 的关系
- 接口测试验证 “后端逻辑的正确性”(数据处理、业务规则),是产品的 “里子”,保证功能的核心逻辑不出错;
- UI 测试验证 “前端交互的正确性与体验”(用户操作流程、界面状态、视觉效果),是产品的 “面子”,保证用户能正常、顺畅地使用这些功能。
没有接口测试,后端逻辑可能漏洞百出;没有 UI 测试,即使后端逻辑完美,用户也可能因为界面问题无法使用。二者结合,才能从 “功能可用” 和 “用户能用” 两个维度全面保障产品质量。
三、环境
在软件开发和运维中,不同 “环境” 本质上是软件在不同生命周期、不同场景下的运行载体
1. 测试环境(Test Environment)
- 定位:软件开发完成后,专门用于 “验证功能是否符合需求” 的环境。
- 特点:
- 数据多为 “模拟数据”(比如测试用的账号、订单,不会影响真实用户);
- 配置较宽松(比如不限制接口调用频率,方便测试人员反复验证);
- 可能包含未完成的功能(方便开发和测试迭代)。
- 用途:开发和测试团队在这里做功能测试、集成测试,验证 “软件能不能用”。
2. 灰度环境(Gray Environment)
- 定位:介于测试环境和生产环境之间,用于 “小范围验证软件稳定性” 的过渡环境。
- 特点:
- 配置、数据接近生产环境(比如用真实用户的部分数据副本,或让少量真实用户参与);
- 只对 “部分用户” 开放(比如 1% 的用户会被分配到灰度环境,体验新功能)。
- 用途:验证 “软件在接近真实的场景下是否稳定”,比如新功能是否会导致性能下降、是否有兼容性问题,避免直接全量上线出问题。
3. Hotfix 环境(紧急修复环境)
- 定位:专门用于 “修复生产环境紧急问题” 的临时环境。
- 特点:
- 配置和生产环境高度一致(确保修复方案在生产中能生效);
- 只部署 “修复补丁”(不包含其他新功能,避免引入新问题)。
- 用途:当生产环境出现严重 bug(比如支付失败、系统崩溃),开发团队在 hotfix 环境验证修复方案,确认没问题后再部署到生产。
4. 生产环境(Production Environment)
- 定位:软件正式对外提供服务的环境,是用户实际使用的 “最终载体”。
- 特点:
- 数据是 “真实用户数据”(比如你的微信聊天记录、电商订单);
- 配置最严格(比如限制接口频率、开启最高级别的安全防护);
- 稳定性要求极高(一旦出问题,直接影响用户体验和业务)。
- 用途:支撑业务的正式运行,是所有环境的 “最终目标”。
5. 一中心、二中心(多集群 / 多机房环境)
- 定位:生产环境的 “高可用部署方案”,本质是 “相同软件在不同物理位置的部署集群”。
- 特点:
- 一中心、二中心可能是不同城市的机房(比如北京机房、上海机房),或同一城市的不同集群;
- 软件版本、配置通常一致,用于 “容灾备份” 和 “负载分担”。
- 用途:避免单点故障(比如一中心机房断电,二中心能立刻接管服务);同时分担用户流量(让不同地区的用户访问最近的中心,提升速度)。
自动化脚本的核心目标是 “替代人工重复验证,确保软件在任何场景下都符合预期”。而不同环境的差异(配置、数据、负载等)可能导致 “在 A 环境正常的功能,在 B 环境出问题”,因此必须逐个验证:
-
测试环境通过:确保 “功能本身没问题”
测试环境是功能验证的 “第一关”,脚本在这里通过,说明软件的核心逻辑(如按钮点击、表单提交)符合需求,没有基础 bug。 -
灰度环境通过:验证 “接近真实场景时是否稳定”
灰度环境的数据和配置更接近生产(比如有真实用户的历史数据、更高的接口调用频率),可能暴露测试环境没发现的问题(比如数据量太大导致页面加载变慢、和其他已上线功能冲突)。脚本在这里通过,才能放心把功能推给更多用户。 -
Hotfix 环境通过:确保 “紧急修复没引入新问题”
Hotfix 的目的是 “快速修复生产 bug”,但如果修复方案有疏漏(比如改了 A 功能,意外影响了 B 功能),可能引发更严重的问题。脚本在这里运行,能验证 “修复有效,且没破坏其他功能”,避免雪上加霜。 -
生产环境(及多中心)通过:最终保障 “用户体验不出问题”
生产环境是用户直接接触的,任何一点小问题(比如按钮点不动、页面报错)都会影响业务。而多中心环境需要验证 “一中心和二中心的软件行为一致”(比如北京用户和上海用户看到的页面、操作结果相同),避免因部署差异导致用户体验不一致。
⭐ 总结
不同环境是软件 “从开发到交付” 的 “层层关卡”,每关的作用是过滤不同类型的问题:测试环境过滤功能 bug,灰度环境过滤真实场景下的稳定性问题,hotfix 环境过滤修复漏洞,生产环境确保最终用户无感知。自动化脚本在这些环境都通过,才能从 “功能可用” 到 “稳定可靠” 再到 “用户无感知”,最终保障业务顺畅运行。
四、脚本抽取
从已有脚本资源中筛选、提取适配的测试脚本的操作,核心是为了让脚本更精准地服务于目标场景,提高测试效率。
一、抽取集测脚本
“集测” 通常指 “集成测试(Integration Testing)”,抽取集测脚本是从测试脚本库中提取专门用于验证 “模块 / 系统间协同工作” 的脚本,目的是确保多个模块集成后能正常交互,覆盖跨模块的业务流程。
- 筛选标准:从现有脚本中挑选覆盖 “跨模块流程” 的脚本,排除仅验证 “单一模块内部逻辑” 的脚本(如仅测试订单服务的本地计算逻辑,不涉及其他服务的脚本)。
例:电商系统中,“用户登录→加入购物车→提交订单→支付” 的全流程脚本,就是典型的集测脚本(涉及登录模块、购物车模块、订单模块、支付模块的集成)。 - 适配调整:如果脚本中包含与集成无关的细节(如单一模块的冗余步骤),会精简或修改,确保脚本聚焦于 “模块间交互点” 的验证(如订单服务调用支付服务时,参数是否正确传递;支付成功后,订单状态是否同步更新)。
让集成测试阶段的脚本更 “精准”,避免因执行大量无关脚本而浪费时间,同时确保跨模块的核心流程被充分覆盖。
二、抽取 hotfix 环境脚本
“hotfix” 指 “紧急修复”(用于快速修复生产环境中突发的严重 bug,如支付失败、系统崩溃等),hotfix 环境是专门用于验证 “紧急修复方案” 的测试环境(通常与生产环境配置高度一致,以确保修复效果能直接复用于生产)。抽取 hotfix 环境脚本是提取适配该环境、用于验证紧急修复的脚本。
hotfix 环境的特点
- 高仿真生产:配置(如数据库数据、服务器规格、网络环境)与生产环境基本一致,避免因环境差异导致 “测试通过但生产仍有问题”。
- 快速部署:hotfix 修复代码通常会快速部署到该环境,测试需在短时间内完成验证(可能几小时内),避免生产故障持续影响用户。
- 聚焦 “修复点”:仅需验证 “被修复的 bug” 及 “可能受影响的关联功能”,无需全量测试(否则来不及在短时间内完成)。
- 筛选标准:
- 优先提取 “直接验证修复点” 的脚本(如修复了 “支付超时未取消订单” 的 bug,就提取 “模拟支付超时→验证订单是否取消” 的脚本);
- 其次提取 “覆盖修复点关联范围” 的脚本(如支付模块修复后,需验证 “订单状态同步”“用户余额扣减” 等关联功能,避免修复 A 问题时意外影响 B 功能)。
- 环境适配:调整脚本中的环境配置(如 hotfix 环境的域名、接口地址、测试数据),确保脚本能在 hotfix 环境中正常运行(如生产环境的用户数据可能脱敏,hotfix 环境需使用对应的脱敏数据测试)。
在短时间内高效验证 hotfix 的有效性,确保修复方案能解决生产问题且不引入新风险,支撑 hotfix 快速上线,减少故障影响范围。
五、数据脱敏
数据脱敏(Data Masking)是指通过技术手段对敏感数据进行变形、替换、隐藏等处理,在保留数据 “格式和业务可用性” 的同时,消除其 “真实敏感信息”,确保数据在非生产环境(如测试、开发、hotfix 环境)使用时,不会泄露用户隐私或企业机密。
⭐ 核心目的
解决 “数据可用性” 与 “数据安全性” 的矛盾
- 测试、开发或紧急修复(hotfix)时,需要使用与生产环境 “结构相似” 的数据(比如同样的字段格式、业务逻辑)才能保证测试效果;
- 但直接使用生产环境的真实数据(如用户手机号、身份证号、银行卡号、住址等)会有隐私泄露风险(违反《个人信息保护法》等法规)。
数据脱敏就是让数据 “看起来像真实数据,实际又不是真实数据”,既满足测试需求,又保障安全。
⭐ 常见脱敏方式(举例说明)
-
替换法:用虚构但格式合法的数据替换真实信息
- 手机号:138***5678(中间 4 位用替换);
- 身份证号:110101********1234(中间 8 位生日信息用 * 替换);
- 银行卡号:6222**** ****1234(隐藏中间 digits)。
-
混淆法:打乱数据顺序但保留格式
- 姓名:将 “张三”“李四”“王五” 随机打乱为 “李三”“张五”“王四”;
- 地址:将 “北京市朝阳区 XX 路” 改为 “上海市静安区 YY 路”(城市和区域随机替换,保留地址格式)。
-
加密法:用不可逆加密算法(如哈希)处理敏感数据
- 对用户密码进行 MD5、SHA256 等哈希处理(即使数据泄露,也无法反推出原始密码)。
-
截断法:保留部分有效信息,截断敏感部分
- 邮箱:zhangs***@163.com(只保留用户名前 3 位和域名)。
-
虚构法:直接生成符合格式的假数据
- 生成假身份证号(符合地区代码、生日校验规则,但无真实对应用户);
- 生成假手机号(符合运营商号段规则,但为空号)。
六、精准测试
“精准测试” 是聚焦 “最关键、最可能出问题的部分” 进行测试,避免无差别地对所有功能反复测试,从而提高测试效率。
1. 为什么需要精准测试?
- 软件迭代速度快:一个系统可能有上百个功能,每次迭代只改了其中 2-3 个功能,如果每次都对所有功能跑一遍全量测试,会浪费大量时间(比如全量脚本跑 8 小时,其实只需要测 1 小时的关键部分)。
- 资源有限:测试机器、人力、时间都是有限的,不可能无限制覆盖所有场景。
2. 精准测试具体做什么?
- 定位 “变更影响范围”:通过代码分析工具,识别 “本次开发修改了哪些代码”,进而推断 “这些代码会影响哪些功能模块”(比如改了支付接口的代码,可能影响 “下单”“退款” 功能)。
- 只测 “受影响的部分”:针对上述影响范围,只运行相关的自动化脚本,其他无关功能暂时不测。
- 结合 “风险等级”:对核心功能(如支付、登录)即使没被直接影响,也可能额外测试(因为风险高);对边缘功能(如历史版本查询)则可适当简化。
3. 目的:
在保证软件质量的前提下,减少无效测试,加快迭代速度,让测试资源聚焦在 “真正需要关注的地方”。