软件测试 - 测试类型
软件测试 - 执行方法:手动测试与自动化测试
Section titled “软件测试 - 执行方法:手动测试与自动化测试”本节重点介绍软件测试的主要执行方法:手动测试 (Manual Testing) 和自动化测试 (Automation Testing)。与其他章节讨论测试什么(例如功能、性能,详见“级别与类型”)或如何设计测试(例如黑盒、白盒,详见“核心方法”)不同,本章探讨的是如何实际执行这些测试。
手动测试由人工测试人员在不使用任何自动化工具或脚本的情况下执行测试用例。测试人员扮演最终用户的角色,与应用程序交互,提供输入,并根据预期结果验证输出。此方法用于各个测试级别,包括单元测试 (unit testing)(由开发人员执行)、集成测试 (integration testing)、系统测试 (system testing) 和用户验收测试 (user acceptance testing - UAT)。
测试人员通常遵循文档化的测试计划和测试用例,但也会采用诸如探索性测试 (Exploratory Testing) 等技术。探索性测试是一种宝贵的手动方法,测试人员的学习、测试设计和测试执行是同时进行的活动。它依赖于测试人员的技能、直觉和经验来发现脚本化测试可能遗漏的缺陷。手动测试对于可用性测试 (usability testing)、即兴测试 (ad-hoc testing) 以及需要人工判断和观察的场景至关重要。
自动化测试 (Automation Testing),也称为测试自动化 (Test Automation),使用专门的软件工具在应用程序上执行预先编写的测试脚本。这涉及编写代码(测试脚本),该代码自动执行测试操作、比较实际结果与预期结果,并报告结果。主要目标是比手动测试更快、更高效、更重复地运行测试。
从概念上讲,测试自动化涉及测试工具与被测应用程序 (AUT - Application Under Test) 交互。工具通过其接口(UI 或 API)驱动 AUT,执行测试脚本中定义的操作,捕获结果,并将其与预定义的断言 (assertions) 或预期结果进行比较。这使得可以无人值守地执行大型测试套件 (test suites)。
主要益处包括提高测试覆盖率 (test coverage)、提高准确性(通过减少人为错误)、更快的反馈周期(尤其是在持续集成/持续部署 CI/CD 中),以及对于回归测试 (regression testing) 等重复性测试的长期成本节约。它对于性能测试 (performance testing)、负载测试 (load testing) 和压力测试 (stress testing) 也是不可或缺的。
自动化什么?
Section titled “自动化什么?”并非所有测试都适合或具有成本效益进行自动化。适合自动化的良好候选包括:
- 重复性测试:例如经常运行的回归测试套件。
- 高风险、关键功能:确保核心功能始终正常工作。
- 数据驱动测试:需要使用多个数据集运行的测试(例如,使用多个有效/无效凭据检查登录表单)。
- 需要精确和一致的测试:人为错误存在风险的场景。
- 跨多个平台/浏览器/设备的测试。
- API 测试:通常比 UI 测试更稳定、自动化速度更快。
- 性能测试、负载测试和压力测试。
- 稳定功能:预计不会频繁更改的需求。
测试自动化金字塔 (Test Automation Pyramid)(强调在单元和 API 级别进行更多自动化,而在 UI 级别较少)是优先考虑自动化工作的良好指南。
何时进行自动化?
Section titled “何时进行自动化?”在以下情况下考虑测试自动化:
- 项目规模大、复杂或长期,足以证明初始投资是合理的。
- 需要重复执行相同的测试场景。
- 应用程序相对稳定;自动化高度不稳定的功能可能导致高维护成本。
- 在 CI/CD 流水线中需要快速反馈。
- 手动测试成为频繁发布的瓶颈。
- 投资回报 (ROI - Return on Investment) 明确:收益超过开发和维护自动化脚本的成本。
如何进行自动化?
Section titled “如何进行自动化?”典型的测试自动化流程包括:
- 定义自动化范围:识别适合自动化的测试用例。
- 选择合适的自动化工具和框架:根据应用程序技术、团队技能和预算。
- 开发测试脚本:使用选定的工具/框架,用 Python、Java、JavaScript、C# 等语言编写代码。
- 设计测试自动化框架:创建结构化环境,以高效地开发、执行和报告脚本(例如,Page Object Model、Keyword-Driven、BDD)。
- 执行测试脚本:运行自动化测试,通常集成到 CI/CD 流水线中。
- 分析结果和报告:生成报告,识别失败,记录缺陷。
- 维护测试脚本:随着应用程序的发展更新脚本。
常用软件测试工具与框架
Section titled “常用软件测试工具与框架”测试工具领域广阔且不断发展。以下是一些按主要用途分类的常用示例:
UI 自动化:
Section titled “UI 自动化:”- Selenium:开源,支持多种浏览器和语言(Java、Python、C#、JavaScript)。事实上的标准。
- Cypress:基于 JavaScript 的现代端到端测试框架,以速度快和开发者友好而闻名。
- Playwright (Microsoft):用于浏览器自动化的 Node.js 库(Chromium、Firefox、WebKit),支持多种语言。
- Appium:开源,用于自动化移动原生、混合和 Web 应用程序(iOS、Android)。
- Micro Focus UFT(前称 QTP):商业工具,支持广泛的技术。
API 测试:
Section titled “API 测试:”- Postman:用于设计、构建、测试和文档化 API 的流行工具。
- Rest Assured (Java):用于测试 RESTful API 的 Java 库。
- Karate DSL:构建于 Cucumber 之上的开源测试自动化框架,专用于 API 测试。
- SoapUI:广泛用于测试 SOAP Web 服务和 REST API。
- Apache JMeter:开源,基于 Java 的负载测试工具。
- K6 (Grafana Labs):面向开发人员和测试人员的现代负载测试工具,可用 JavaScript 编写脚本。
- Gatling:开源,基于 Scala 的负载测试工具,以高性能而闻名。
- Micro Focus LoadRunner:商业,全面的性能测试解决方案。
单元测试框架(常由开发人员使用):
Section titled “单元测试框架(常由开发人员使用):”- JUnit (Java), TestNG (Java)
- NUnit (.NET), MSTest (.NET)
- PyTest (Python), unittest (Python)
- Jest (JavaScript), Mocha (JavaScript)
测试管理工具:
Section titled “测试管理工具:”- Jira(搭配 Xray、Zephyr Scale 等插件)
- TestRail
- qTest
- Azure Test Plans(Azure DevOps 的一部分)
选择合适的工具取决于项目需求、团队专业知识、应用程序技术和预算。通常会结合使用多种工具以实现全面的测试覆盖率。