【问题标题】:measure pact test coverage of an API衡量 API 的协议测试覆盖率
【发布时间】:2020-09-15 12:09:54
【问题描述】:

鉴于自动化测试的重要性,我想知道是否有可能衡量 Pact 测试的测试覆盖率。

请记住,对于单元测试,大多数框架/IDE 都提供了检查代码的哪些部分被执行的方法,从而检查是否至少代码的每个部分(比如在一个类中)都被某个测试执行了。

相应地,Pact 测试(旨在检查提供者或消费者是否符合 API 规范)通过测试大部分可能的交互来获得可信度。如果是这样,那么它可以通过将其逻辑拆分为一个功能部分来减少 e2e 测试的数量,由一个组件中的单元测试和集成测试覆盖,以及断言两个组件与商定 API 的一致性的协议测试。 (详情请参阅https://docs.pact.io/getting_started/what_is_pact_good_for/。)

鉴于可以通过 enunciate 或 swagger 等库自动发现某些 Web 组件的 REST API,我想知道是否可以将他们的发现与 PACT 测试描述进行比较,以查看是否有任何重要的参数或端点在后者中缺失。 (另外,我不确定这是否意味着加倍努力来提供清晰的注释和 PACT 合同,但在我看来,Java 中的清晰注释并不那么重,即主要通过 REST 注释来识别 REST 端点无论如何都是功能所必需的。)

如果我的问题对于 stackoverflow 来说过于笼统,请告诉我,我宁愿在 stackexchange 等更多学术网站上提问。

【问题讨论】:

    标签: automation swagger pact test-coverage enunciate


    【解决方案1】:

    来自 docs.pact.io 问题档案:

    如何判断我的 API 是否具有良好的合同测试覆盖率?

    这实际上是一个错误的问题。合同测试的目的不是为提供者提供任何特定百分比的覆盖率(这就是提供者自己的功能测试的目的)。契约测试旨在提供(尽可能接近)100% 覆盖调用提供者的消费者代码(您可以将其视为“提供者客户端代码”)。如果您在测试套件的单独步骤中执行消费者 Pact 测试,则可以使用标准代码覆盖工具来确定您的 Pact 测试是否覆盖了足够百分比的提供程序客户端代码。

    https://docs.pact.io/faq/question_archive#how-can-i-tell-if-i-have-good-contract-test-coverage-of-my-api

    不幸的是,这并不能告诉您是否已经涵盖了参数的所有不同变体。确保对每一个参数变化都进行合同测试通常并不完全可行(想象一下,必须尝试覆盖特定枚举的 20 种不同组合)。在那个阶段,放入一些经过精心挑选的测试用例可能是一个更有效的选择,然后确保您的代码可以优雅地处理任何异常(例如,具有良好的监控,将意外值报告给开发团队)。

    【讨论】:

    • 谢谢。好主意(尤其是链接中的详细信息)。 TLDR 关于提供者的问题是错误的,因为他需要提供多个合同。对于消费者来说,可以在运行 PACT 测试时使用标准的测试覆盖工具来完成。
    猜你喜欢
    • 2015-07-07
    • 2013-11-09
    • 1970-01-01
    • 2015-04-05
    • 2020-11-03
    • 2015-03-13
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多