自动化测试

本文最后更新于: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

Jest = Mocha + Chai + Sinon + mockserver + istanbul

Integration Test集成测试

在浏览器环境或者将互相依赖的模块集成到一起进行测试

  • 从用户角度出发,就像写产品说明书
  • 不关注代码逻辑细节,只关注行为
  • 快速重构
  • 👎 代码覆盖率低
  • 👎 难以定位问题

端到端测试(E2E)

通过操作浏览器的行为进行测试

  • 真实的运行环境
  • 👎 速度很慢
  • 👎 调试定位问题困难

Cyress

快照测试

通过对浏览器中的运行中的应用程序打快照进行对比(DOM 结构)

  • 主要用于 UI 测试

测试覆盖率

代码覆盖率

代码被执行的比例

  • 行覆盖率(line coverage):是否每一行都执行了?
  • 函数覆盖率(function coverage):是否每个函数都调用了?
  • 分支覆盖率(branch coverage):是否每个 if 代码块都执行了?
  • 语句覆盖率(statement coverage):是否每个语句都执行了?

需求覆盖率

由软件需求出发的测试(快照测试,端到端测试),逻辑代码本身是个黑盒,只能人为标记需求覆盖率。

测试开发

TDD 测试驱动开发

先写测试再写功能

  1. 编写测试用例
  2. 运行测试
  3. 测试通过
  4. 重构代码
  5. 编写测试用例

TDD 的原则

  • 独立测试

BDD 行为驱动开发

实现功能后添加测试


自动化测试
http://yoursite.com/2022/05/05/自动化测试/
作者
tatekii
发布于
2022年5月5日
许可协议