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

原文 标签 node.js rest testing code-coverage

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

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

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

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


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


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

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

2:静态分析


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


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

缺点:生成解析树并非易事。不检测永远不会运行的无效代码;测试套件需要保持同步

3:分析

我过去在嵌入式系统上使用GreenHills Code Coverage Tools进行过此操作


启动dtrace之类的事件探查器,并分别记录每个测试的堆栈日志
解析堆栈日志并将“测试”分配给每一行代码
手动分析带注释的代码以查找差距。


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

缺点:减慢测试速度;无法并行执行性能测试;不标记何时永远不会发生可能的结果。

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

最佳答案

组合测试(建议使用其他名称)


大致基于QuickCheck的思想
需要初始提取端点(以及#2中提到的静态分析),创建所有潜在端点和参数的列表,并执行它们
验证:

指示灯:应用程序应稳定以处理所有可能的输入
强:需要有关端点的书面规范才能对其进行验证



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

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

可能有用的节点模块:


claire
quickcheck

相关文章:

java - 使用Rest的Android Web服务-SOAP消息中的错误

java - 与Maven进行集成测试的最佳实践?

mysql - 使用节点js将数据从html表单发送到mysql数据库

node.js - 对socket.io使用http和https

node.js - Parsoid Server未解析页面

rest - 无法在Office365 REST Api中检索附件的'ContentId'属性

node.js - 如果发生错误,如何在Node.js服务器上保留数据?

java - 使用CDI后期发现 bean 类

ruby-on-rails - `post_via_redirect`已被弃用,并将在Rails 5.1中删除

javascript - 如何监听页面加载时触发的事件