NodeJS代码覆盖自动化测试

时间:2013-09-03 23:55:13

标签: node.js rest testing code-coverage

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

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

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

1:基本解决方案(目前已实施)

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

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

缺点: 非常容易出错,手动检查很多;如果有5种方法可以使用'FailDueToX'并且您只测试其中的1种,则不会标记任何问题。 “覆盖”的非常基本的定义

2:静态分析

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

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

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

3:分析

我过去在GreenHills Code Coverage Tools

的嵌入式系统上做过这个
  • 启动dtrace之类的分析器并分别记录每个测试的堆栈日志
  • 解析堆栈日志并为每行代码分配'test'
  • 手动分析带注释的代码以找到差距。

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

缺点: 减慢测试速度;无法并行进行性能测试;当可能的结果从未发生时,不标记。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

缺点: :规范验证很棘手。我不知道现有的实施方式。

潜在有用的节点模块: