返回

通过覆盖率收集全面检验系统功能和熟悉系统结构的实践方案

前端

Qunar 酒店 NodeJS 覆盖率收集实践

对于一个没有维护单元测试的旧系,通过收集覆盖率来检验系统功能和熟悉系统结构不是一件容易的事情,但 Qunar 酒店做到了,他们进行了诸多的思考与尝试,本文将分享 Qunar 酒店的实践方案。

背景

随着业务的快速发展,Qunar 酒店的 NodeJS 系统变得越来越复杂,代码量也日益庞大。然而,由于历史原因,该系统并没有维护单元测试,这给系统测试带来了很大的挑战。为了解决这一问题,Qunar 酒店团队决定通过收集覆盖率来检验系统功能和熟悉系统结构。

实践方案

Qunar 酒店团队采用了以下实践方案:

  1. 选择覆盖率工具: 团队选择了 Istanbul 作为覆盖率收集工具。Istanbul 是一款功能强大的 JavaScript 覆盖率工具,支持多种框架和语言。
  2. 集成到 Jenkins: 团队将 Istanbul 集成了到 Jenkins 中,实现了自动化的覆盖率收集和报告。Jenkins 是一款持续集成工具,可以自动执行构建、测试和部署任务。
  3. 使用 Codecov 报告覆盖率: 团队使用了 Codecov 来生成覆盖率报告。Codecov 是一款基于云的覆盖率分析平台,可以提供详细的覆盖率报告,包括代码覆盖率、未覆盖代码行和复杂度分析等。

技术实现

1. 安装 Istanbul

npm install --save-dev istanbul

2. 配置 Istanbul

package.json 文件中添加以下脚本:

"scripts": {
  "test:coverage": "istanbul cover --dir coverage --include '**/*.js' --exclude '** /node_modules/**', '** /vendor/**', '** /coverage/**'"
}

3. 集成到 Jenkins

在 Jenkins 中创建一个 pipeline,添加以下步骤:

- stage('Coverage') {
    steps {
      sh 'npm run test:coverage'
      publishCoverage resultsPath: 'coverage/coverage-summary.json'
    }
  }

收益

通过实施该实践方案,Qunar 酒店团队获得了以下收益:

  • 提高代码质量: 覆盖率收集有助于识别未覆盖的代码区域,从而促使团队编写更多的测试用例,提高代码质量。
  • 提升测试覆盖率: 自动化化的覆盖率收集和报告可以持续跟踪测试覆盖率,帮助团队了解系统的测试覆盖率情况,并针对性地提高覆盖率。
  • 熟悉系统结构: 覆盖率报告可以直观地展示系统的代码覆盖情况,帮助团队更好地理解系统结构,便于进行故障排查和维护。

总结

Qunar 酒店通过收集覆盖率来检验系统功能和熟悉系统结构的实践方案,对于没有维护单元测试的旧系来说,是一种非常有效的方法。该方案使用 Istanbul 和 Codecov 工具,并集成到 Jenkins 中,实现了自动化的覆盖率收集和报告,有助于提高代码质量和测试覆盖率。