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是棘手的。 我不知道现有的实施。
潜在有用的节点模块:
- 克莱尔
- 快速检查