易君召
发布于 2026-09-08 / 作者:易君召 / 3 阅读
0

软件开发自动化测试完整实践

自动化测试:用代码 / 工具代替人工执行测试用例,校验程序行为、输出是否符合预期,回归、迭代项目中减少重复手工测试,提升版本交付质量与速度。自动化不能完全替代手工测试,适合重复、稳定、大量回归场景;探索性、UI 主观体验、复杂业务场景仍需要手工测试。

一、自动化测试分层(金字塔模型)

自上而下:UI 层 → 接口层 → 单元层,投入重心越往下,收益越高、维护成本越低

测试层级

目标

占比

特点

单元测试

验证函数、类、方法逻辑正确性

70%

粒度最小,速度快,成本低,开发人员编写

接口测试

验证 API 入参出参、业务逻辑、异常、权限

20%

核心自动化层,不依赖前端,稳定性高

UI 自动化

模拟用户操作页面,校验页面交互

10%

维护成本高,页面一变脚本就失效

实践原则:多写单元、接口,少写 UI 自动化。很多团队过度投入 UI 自动化,后期脚本大量失效,维护负担很重。

1. 单元测试

执行者:开发人员,开发阶段完成

  • 核心:隔离外部依赖(数据库、MQ、第三方接口),使用 Mock 打桩,只测自身业务逻辑

  • Java 常用:JUnit5、AssertJ、Mockito

// JUnit5简单示例
@Test
void testCalc() {
    assertEquals(10, calcService.add(3,7));
}
  • Python:pytest + unittest.mock

  • Go:testing 标准库

指标参考:代码覆盖率,追求行覆盖率≠质量高;重点看分支、条件覆盖率,核心业务模块尽量 80%+,非核心不用盲目追求 100%。

2. 接口自动化测试

执行者:测试 / 开发,覆盖:正常场景、边界值、异常入参、权限控制、超时、错误码

  • 工具选型

    • 代码实现:Java RestAssured;Python requests+pytest;Go resty

    • 无代码脚本:Postman/Newman、Apifox,适合快速搭建,适合中小团队

    • 开源平台:MeterSphere,接口管理 + 自动化 + 报告一体化

  • 最佳实践

    1. 环境隔离:独立测试环境,数据可预置、执行后清理数据

    2. 参数化:用例数据与脚本分离,csv/yaml 管理测试数据

    3. 依赖处理:接口之间有上下游依赖,提取 token、id 传递给下一个接口

    4. 校验:不仅校验 http 状态码,校验返回体字段、业务状态码、数据结构

    5. 异常用例:非法参数、越权访问、空值、超长字符串

3. UI 自动化测试

模拟真实用户点击、输入、跳转,测试页面流程

  • Web:Selenium、Playwright(现代首选,稳定性强,等待机制优秀)、Cypress

  • App:Appium

痛点:前端页面改版、元素 ID 变更,脚本大面积失效。 使用建议:只覆盖核心主流程,不要把所有页面都做自动化。优先用稳定定位器,尽量避免使用 xpath 绝对路径。

二、自动化测试完整流程

  1. 选择适合自动化的用例 ✅适合自动化:重复回归用例、核心业务流程、大量数据输入、高频迭代模块 ❌不适合:新功能不稳定、UI 频繁变动、一次性测试、主观体验类

  2. 设计测试用例 用例独立:每条用例尽量独立,不要强依赖上一条用例执行结果;预置测试数据,执行完成清理脏数据。

  3. 编写自动化脚本

  • 分层封装:公共工具、请求封装、页面元素封装,不要复制粘贴代码

  • 配置环境区分:dev/test/pre 环境配置分离

  1. 本地调试运行 本地跑通,修复脚本,生成测试报告。

  2. 接入 CI/CD 流水线(关键!自动化落地核心) 把自动化嵌入研发流水线,代码提交自动触发执行。

  • 提交代码:执行单元测试;单元测试失败阻断合并

  • 构建部署测试环境完成:自动执行接口自动化

  • 定时任务:夜间全量回归自动化套件

工具:Jenkins、GitLab CI、GitHub Actions、Tekton

  1. 结果分析、告警

  • 生成可视化报告:失败用例截图、日志、请求响应记录

  • 失败告警:企业微信 / 钉钉推送失败信息

  • 区分问题:业务 BUG / 脚本本身 bug / 环境不稳定,及时维护脚本。

  1. 持续维护脚本 产品迭代,业务变更必须同步更新自动化脚本;长期不维护的自动化套件会变成一堆永远跑不通的僵尸脚本。

三、性能测试(广义自动化)

属于专项自动化,压测服务并发、吞吐量、响应时间 工具:JMeter、Locust、k6

一般不放在 CI 做全量压测,轻量基准压测可接入流水线。

四、常见踩坑点

  1. 自动化覆盖率崇拜:盲目追求高覆盖率,写大量无价值脚本,维护成本爆炸

  2. 用例强依赖顺序:A 用例失败,后面全部失败,定位困难

  3. 测试环境不稳定:网络、数据库脏数据,导致大量随机失败(flaky test)

  4. UI 自动化写太多:页面频繁改动,脚本天天修,投入产出比很低

  5. 自动化写完就不管:版本迭代不同步更新脚本,套件逐渐废弃

  6. 不做数据清理:测试环境堆积大量脏数据,影响后续执行

五、中小团队落地建议(落地路线)

  1. 第一步:推动开发写单元测试,核心业务模块优先,接入 CI,提交代码自动跑单测

  2. 第二步:做接口自动化,覆盖核心业务流程,部署测试环境后自动执行接口套件

  3. 第三步:少量 UI 自动化,只覆盖核心主链路

  4. 第四步:定时回归,配置告警,持续迭代维护脚本

六、简单示例技术栈组合

  • Java 后端项目:JUnit5 + Mockito + RestAssured + GitLab CI + MeterSphere

  • Web 前后端:Playwright + pytest + GitLab CI

  • 轻量化不写代码:Apifox + Newman + Jenkins


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/software-automated-testing-complete-practices-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/