node.js - 自动化测试的 NodeJS 代码覆盖率

标签 node.js rest testing code-coverage

作为 NodeJS REST API 的自定义测试框架的一部分,我想通过将所有可能结果与测试套件收到的结果进行比较,自动检测何时我的测试不再提供适当的覆盖.

有哪些方法可以做到这一点?我们可以假设它被用于具有需要覆盖率分析的入口函数(API 端点)列表的 REST API,并且每个入口函数将以一个已知的“导出函数”结束,该函数以标准方式响应请求者。

这是我目前发现的:

1:基本方案(目前已实现)

  • 在编写每个 REST 端点时,手动创建一个包含所有可能结果“代码”的列表,例如 [Success、FailureDueToX、FailureDueToY]
  • 测试运行后,确保列表中的每个代码都已被每个端点的测试套件看到。

优点: 非常基础且易于使用;不改变性能测试时间

缺点: 大量人工检查很容易出错;如果有 5 种“FailDueToX”方法并且您只测试其中的一种,则不会标记任何问题。 “覆盖率”的非常基本的定义

2:静态分析

  • 将代码解析成某种解析树并查找“退出函数”的所有实例
  • 向上遍历树直到到达 API 端点,并将该导出实例作为预期输出添加到端点(需要保留堆栈跟踪记录以通过哈希或类似方式到达那里)
  • 运行测试时,端点返回堆栈跟踪哈希或类似信息,并将其与预期输出列表进行比较。

优点: 自动;捕获可能导致相同输出代码的不同分支

缺点: 生成解析树并不简单;不检测永远不会运行的死代码;测试套件需要保持同步

3:剖析

我过去在嵌入式系统上用 GreenHills Code Coverage Tools 做过这个

  • 启动像dtrace这样的分析器并分别记录每个测试的堆栈日志
  • 解析堆栈日志并将“测试”分配给每一行代码
  • 手动分析带注释的代码以找出差距。

优点: 半自动;向开发人员提供有关总覆盖率的更多信息;可以看到

缺点: 减慢测试速度;无法并行做性能测试;当可能的结果永远不会发生时,不会发出信号。

还有什么,哪些工具可以帮助我实现静态分析和概要分析目标?

最佳答案

组合测试(建议不同的名称将不胜感激)

  • 大致基于 QuickCheck 的想法
  • 需要端点的初始提取(以及#2 中提到的静态分析),创建所有潜在端点和参数的列表,并执行它们
  • 验证:
    • 轻:应用程序应稳定处理所有可能的输入
    • strong:需要关于端点的书面规范才能对其进行验证

优点::半自动(有合适的​​工具)

缺点::规范验证很棘手。我不知道现有的实现情况。

可能有用的 Node 模块:

关于node.js - 自动化测试的 NodeJS 代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18603273/

相关文章:

java - 3.1.1 中的 SpringMVC Restful Service 无法运行(3.0.3 中运行正常)

Angular 7 测试重试当模拟 http 请求无法实际重试时

spring - 难以使用测试代码验证事务内的 hibernate 更新查询

android - connectedAndroidTest - 任务尚未声明任何输出

node.js - 使用 Express 从 ASP.NET Web API 迁移到 Node.js

javascript - Angular 是否提供任何方法来隔离服务层?

node.js - 允许 swagger 查询参数为字符串或整数数组

rest - 是否可以缓存服务器对服务器 HTTP POST 请求的响应?

javascript - 其他形式的字符

javascript - Sequelize : Error trying to nested association