自动化测试
本文最后更新于:2022年7月14日 下午
自动化测试
电脑代替你做回归测试
测试分类
静态测试
在编写代码逻辑阶段时进行报错提示
-
typescript -
eslint
Unit Test单元测试
/** example */
describe("测试组", () => {
it("async 测试", () => {
expect.assertions(1); // 期望断言个数,异步的时候记得用
expect(xxx).toEqual(123);
});
it("promise 测试", () => {
// 别传递done了💪
expect.assertions(2); // 期望断言个数,异步的时候记得用
return asyncFunc.then((res) => {
expect(res.length).toEqual(10);
expect(res.data.length).toBeGreaterThan(5);
});
});
test("async test", async () => {
expect.assertions(1); // 期望断言个数,异步的时候记得用
const result = await runAsyncOperation();
expect(result).toBe(true);
});
});
/**
* mock fetch
* 测试中尽量不要引用别的库,他们都test过了
* 直接mock他的返回
*/
const mockFetch = jest.fn().mockReturnValue(Promise.revolve({
json: () => Promise.resolve({
// ...your data
})
}))
it('mockFetch被执行了',()=>{
expect.assertion(1)
return randomUrl.requestBaidu(mockFetch).then(()=>{
expect(mockFetch.mock.calls.length).toBe(1) // mockFetch被call了一次
})
})对应用程序中最小的单元(函数,组件)进行测试
- 有利于模块化设计,
- 代码覆盖率高
- 👎 难以保证多个单元一起运行时的正确率
Jest = Mocha + Chai + Sinon + mockserver + istanbul
Integration Test集成测试
在浏览器环境或者将互相依赖的模块集成到一起进行测试
- 从用户角度出发,就像写产品说明书
- 不关注代码逻辑细节,只关注行为
- 快速重构
- 👎 代码覆盖率低
- 👎 难以定位问题
端到端测试(E2E)
通过操作浏览器的行为进行测试
- 真实的运行环境
- 👎 速度很慢
- 👎 调试定位问题困难
快照测试
通过对浏览器中的运行中的应用程序打快照进行对比(DOM 结构)
- 主要用于 UI 测试
测试覆盖率
代码覆盖率
代码被执行的比例
- 行覆盖率(line coverage):是否每一行都执行了?
- 函数覆盖率(function coverage):是否每个函数都调用了?
- 分支覆盖率(branch coverage):是否每个 if 代码块都执行了?
- 语句覆盖率(statement coverage):是否每个语句都执行了?
需求覆盖率
由软件需求出发的测试(快照测试,端到端测试),逻辑代码本身是个黑盒,只能人为标记需求覆盖率。
测试开发
TDD 测试驱动开发
先写测试再写功能
- 编写测试用例
- 运行测试
- 测试通过
- 重构代码
- 编写测试用例
- …
TDD 的原则
- 独立测试
BDD 行为驱动开发
实现功能后添加测试
自动化测试
http://yoursite.com/2022/05/05/自动化测试/