NodeJS代码自动化testing覆盖率

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

有什么方法可以做到这一点? 我们可以假设它被用于REST API,其中包含需要覆盖分析的入口函数(API端点)列表,每个入口函数将以一个已知的“退出函数”结束,以标准方式响应请求者。

这是我到目前为止发现的:

1:基本解决scheme(目前正在实施)

  • 在编写每个REST端点时,手动创build所有可能的结果“代码”的列表[成功,失败,失败,失败等等]
  • 在testing运行之后,确保每个端点的testing套件都能看到列表中的每个代码。

优点:非常基本和易于使用; 不改变性能testing时间

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

2:静态分析

  • 将代码parsing为某种分析树,然后查找“退出函数”的所有实例
  • 遍历树直到到达API端点,并将该实例添加到端点作为预期的输出(需要保留堆栈跟踪logging以通过散列或类似方式到达那里)
  • 运行testing时,端点将返回堆栈跟踪散列或类似内容,并将其与期望的输出列表进行比较。

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

缺点:生成分析树不是微不足道的; 不会检测永远不会运行的死代码; testing套件需要保持同步

3:分析

我已经在使用GreenHills代码覆盖工具的embedded式系统上完成了这项工作

  • 启动类似dtrace的分析器,并分别logging每个testing的堆栈日志
  • parsing堆栈日志并将“testing”分配给每行代码
  • 手动分析带注释的代码以查找差距。

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

缺点:减慢testing; 无法并行执行性能testing; 当可能的结果永远不会发生时,不标志。

还有什么,以及哪些工具可以帮助我进行静态分析和分析目标?

组合testing (不同的名字build议将不胜感激)

  • 松散地基于QuickCheck的想法
  • 需要初始提取端点(和#2中提到的静态分析),创build所有潜在端点和参数的列表,并执行它们
  • validation:
    • light:app应该是稳定的,以处理所有可能的input
    • 强:需要关于端点的书面规范来validation它

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

缺点::规范validation是棘手的。 我不知道现有的实施。

潜在有用的节点模块:

  • 克莱尔
  • 快速检查