# 自动化测试 **Repository Path**: 125586657/automated-testing ## Basic Information - **Project Name**: 自动化测试 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-05-17 - **Last Updated**: 2025-05-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 自动化测试 语雀: https://www.yuque.com/lipengzhou/frontend-testing 准备练手模板: https://todomvc.com/ https://github.com/tastejs/todomvc-app-template #### 一、测试分类 ``` 1. 单元测试:验证独立的单元是否正常工作 2. 集成测试:验证多个单元协同工作 3. 端到端测试:从用户角度以机器的方式在真实浏览器环境验证应用交互 4. 快照测试:验证程序的 UI 变化 它们适用于不同的场景,有各自的优势与不足。 需要注意的是,它们不是互相排斥,而是相互补充的。 ``` ##### 1.单元测试 ``` 单元测试是对应用程序最小的部分(单元)运行测试的过程。 通常,测试的单元是函数 但在前端应用中,组件也是被测单元 常见的 JavaScript 单元测试框架 ● Jest ● Mocha ● Jasmine ● Karma ● ava ● Tape Jest === Mocha + Chai + Sinon + mockserver + istanbul ``` ##### 2.集成测试 ``` 人们定义集成测试的方式并不相同,尤其是对于前端。 有些人认为在浏览器环境上运行的测试是集成测试; 有些人认为对具有模块依赖性的单元进行的任何测试都是集成测试; 也有些人认为任何完全渲染的组件测试都是集成测试。 ``` ##### 3.端到端测试(E2E) ``` E2E(end to end)端到端测试是最直观可以理解的测试类型。 在前端应用程序中, 端到端测试可以从用户的视角通过浏览器自动检查应用程序是否正常工作 一些流行的端到端测试框架: ● Cypress ● Nightwatch ● WebdriverIO ● playwright ``` ##### 4.快照测试 ``` 快照测试会给运行中的应用程序拍一张图片, 并将其与以前保存的图片进行比较。 如果图像不同,则测试失败。 这种测试方法对确保应用程序代码变更后是否仍然可以正确渲染很有帮助 ``` #### 二、测试分类 ``` 金字塔模型自下而上分为单元测试、集成测试、UI 测试, 之所以是金字塔结构是因为单元测试的成本最低, 与之相对, UI 测试的成本最高 ``` #### 三、代码覆盖率 ``` 测试覆盖率(test coverage)是衡量软件测试完整性的一个重要指标。掌握测试覆盖率数据,有利于客观认识软件质量,正确了解测试状态,有效改进测试工作。 如何度量测试覆盖率呢? ● 代码覆盖率 ● 需求覆盖率 ``` #### 四、测试开发方式 ``` 测试开发有两个流派: ● TDD:测试驱动开发,先写测试后实现功能 ● BDD:行为驱动开发,先实现功能后写测试 个人推荐: ● 建议开发功能函数库使用 TDD 方案; ● 建议开发业务系统使用 BDD 方案; TDD 的问题: ● 由于是以单元测试为主,会导致做出来的东西和实际功能需求相偏离 ● 过于依赖被测试功能的实现逻辑导致测试代码和实现代码耦合太高难以维护 BDD 行为驱动开发: ● 不需要再面向实现细节设计测试,取而代之的是面向行为来测试 ● BDD 的核心是关注软件的功能测试,所以 BDD 更多的是结合集成测试进行 ``` ##### BDD 解决方案: ```shell Cucumber: https://cucumber.io/docs/gherkin/reference/ 用描述性自然语言定义的测试,客户、测试人员和开发人员都能看得懂,能达成共识,这种语法叫做 Gherkin Syntax,小黄瓜语法。 ● 以关键字 Scenario、Feature 等来描述场景 ● 以关键字 Given、When、Then 来描述步骤 Feature: 添加任务 Scenario: 在输入框中输入任务名敲回车确定,输出到任务列表中 Given "Hello World" When 在输入框中敲回车 Then 任务列表增加一个名称为 "Hello World" 的任务 Scenario: 在输入框中输入空内容,不输出到任务列表中 Given "" When 在输入框中敲回车 Then 任务列表中不增加任何内容 ```