前端自动化测试分为功能测试、性能测试、可靠稳定性测试。
单元测试
如果按照测试粒度来划分的话,那么前端项目可以看做是一个个方法/函数的组成,这些方法和函数可以看成是项目的最小测试粒度,即为单元测试。 我们也可以将项目划分为模块粒度,然后这些模块组合起来到页面暴露给用户,那么如用户页面上发出请求到页面受到响应,数据流经过的整个链路成为端到端的测试。
测试金字塔
前端主流的测试框架:MOCHA/Jest
1.如何执行检测
通过npm test执行检测,会自动找到项目中.test.js文件,然后开始执行检测函数,终端会告诉你检测见过,具体那条检测没有过
2.如何生成测试覆盖率
通过执行npx jest --coverage这个命令,会在终端生成测试覆盖率:你的代码覆盖率,分支覆盖率。或者在coverage目录中就会有html文件可以可视化查看测试覆盖率。
3.Jest匹配器
就是函数的expect的结果的匹配,例如如何检测结果是引用对象时候怎么匹配,toBe是比较引用地址,所以这里需要使用toEqual,结果是布尔值、数值、不等式等如何匹配。
4.Jest如何使用import导入ESModue而不用require
通过安装babel-press-env,然后配置对应的babelrc配置文件,就可以让babel做这层转化了。
5.如何测试异步代码
(1)如果保证接口返回之后测试我们的Jest代码
通过加上return关键字,那么Jest就认为是这个是异步代码
(2)判断接口是否不存在:
通过expect(e捕获的异常).toString().indexOf('404')。将错误转为字符串,然后判断是否含有404,也可以通过该方法判断接口是否能返回不是200.
当然,这里还需要额外的断言,因为这里只写了catch方法,那么只有接口报错的时候才走这个test,并且通过测试用例。如果是返回正常,就不会走catch,那么就直接通过测试。因此需要加一个断言,表示必须执行一次expect
(3)通过async、await编写测试异步代码
2.端到端(E2E测试)
这里使用一个无头浏览器的库(即没有UI界面的模拟浏览器,通过配合nodejs对应的库来模拟浏览器的操作),常见的库为Puppeteer。
整体思路:
如果直接安装puppter会导致内存消耗过大,因此这里只需要安装puppter-core就行。