前端自动化测试 | 青训营笔记

83 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

  • 什么是自动化测试?
  • 为什么要做自动化测试?
  • 前端自动化测试的技术选型
  • 如何进行前端自动化测试
  • 自动化测试的持续集成

理想的软件开发V模型 需求分析->概要设计->详细设计->编码->单元测试->集成测试->系统测试->验收测试

单元测试:开发人员通过编码的方式对自己的代码进行正确性校验

集成测试:在不同模块集成以后,QA团队对其正常通信和功能进行多维度测试

系统测试:QA团队对整个系统进行端对端测试

为什么要做自动化测试

集成测试和前端自动化测试

集成测试:测试人员保障整体系统功能符合预期的一种方式

研发角度的自动化测试:虽然也是开发保障系统功能的一种方式,但是时间点不太一样;关注更多的是后续功能的维稳,而不完全本次功能的稳定

前端为什么要做自动化测试

  1. 统一代码风格
  2. 组件Readme 用例化,保持时效性
  3. 有效审视代码中的耦合逻辑
  4. 避免后续迭代影响到历史功能,发布breaking change

前端自动化测试的技术选型

The more your tests resemble the way your software is used, the more confidence they can give you.

---《Google软件测试之道》

技术选型:开发成本低;不会频繁变更;上手快,学习成本低

image.png

image.png

Role:无障碍模型。W3C规定每一个元素都有一个对应的role,就是角色;例如一个原生的button标签,它就有一个button的role。

技术选型

  • Jest + React testing library + Cypress + storybook :
  • 测试框架: Jest(提供一个可运行的环境、测试结构、结果报告、代码覆盖、断言、mocking、snapshot )
  • 测试辅助库: react-testing-library (dom查询, 断言和事件的模拟,React18 推荐的UI自动化的集大成测试辅助库)
  • Cypress + storybook: E2E端对端测试,覆盖单元测试不易于覆盖的复杂场景

配置

配置示例仓库: github.com/czm12904337…

demo仓库: https://github.m/czm1290433700/test.demo

自动化测试的基本元素

  • 模块(一类用例)
  • 用例,一组需要验证的逻辑
  • 渲染元素
  • 查询
  • 断言,对查询元素的预期

查询

Get:返回查询的匹配节点,如果没元素匹配,则会报错(针对单查如果查到多个也会报错);

Query:返回查询的匹配节点,如果没有元素匹配会返回null, 但是不会报错(同样针对单查,如果查到多个匹配元素也会报错)

Find:返回一个Promise, 默认超时时间为1000ms,如果没有元素匹配或者查找超时,Promise 状态切为reject(同样 针对单查,如果查到多个元素,也会返回reject )

ARIA(Accessible Rich Internet Applications)是一组属性,用于定义使残障人士更容易访问Web内容和Web 应用程序(尤其是使用JavaScript 开发的应用程序)的方法。

通过无障碍属性查询相比通过类名查询减少对代码结构的依赖,使得用例更为强健,不容易被修改。

断言 可以分为Jest 和Jest Dom提供,是一组判断当前元素是否符合某种预期的效果

Jest提供了一系列基础的断言,类似toBe,not,toEqual等.可以移步jestjs.io/docs/gettin… 查阅

Jest Dom是react testing library 补充的一系列与DOM相关的特殊断言,可以移步github.com/testing-lib… 查阅

事件模拟

针对这种场景,React Testing Library 提供了两种手段来模拟,fireEvent 和 userEvent

我们更推荐使用userEvent, 相比fireEvent,userEvent更贴切真实场景地模拟了事件,而fireEvent 只是调度对应的事件。

我们书写的用例应该尽可能从用户视角来展开,而不是代码层面,这样对于用例本身来说,才是更强健的