【问题标题】:Karate Standalone as Mock Server with multiple Feature Files空手道独立作为具有多个功能文件的模拟服务器
【发布时间】:2020-04-22 19:35:31
【问题描述】:

我尝试使用 Karate 设置集成/API 测试套件,并考虑使用 Karate Netty 来模拟所需的服务。对于测试设置,被测系统 A(一个 Spring Boot 应用程序)完全启动。然后空手道测试由针对该实例运行的 Maven 测试执行。

服务 A 依赖于多个其他服务,这些服务需要被模拟出来以进行测试。为此,我的想法是将一个正在运行的 Karate Netty 独立实例配置为 HTTP 代理(由服务 A 的 JVM args 完成)。

现在我的想法是创建一个测试功能文件xyz-test.feature
此文件所需的模拟在关联的模拟功能文件中定义:xyz-mock.feature
(测试场景相当复杂,外部服务的响应可能会有所不同)

这意味着对于完整的测试运行,我需要加载几个模拟功能文件。所以:

  1. 多个模拟特征文件的匹配策略是什么?可以这么说,哪种情况会胜出。

  2. 有什么方法可以确保相关的测试文件使用了正确的模拟文件?
    (显然,我可以重新配置正在运行的独立实例并建议它接下来使用 xyz-mock.feature。
    但这会阻止我对我的 API 测试使用并行执行,对吗?)

我已经考虑过重用Correlation-Id,我可以为每个测试发送它,然后在模拟文件中匹配它(它也发送到所有调用的服务)。但是:

  1. 有没有办法为每个模拟文件定义一个全局匹配器?

【问题讨论】:

    标签: karate


    【解决方案1】:

    听起来您只需要一个模拟文件。如果您愿意,您可以在不同的端口上启动 2,但没有办法将它们“合并”到一个端口中 - 如果您正在寻找的话。

    根据我的经验,您将能够让一个模拟来处理所有边缘情况。这是因为空手道的方法是非常规的:您几乎编写了一个有状态的服务器。但是通过将变量保存在内存中和一些巧妙的 JSON 路径,您可以用很少的代码行来模拟 CRUD:https://github.com/intuit/karate/tree/master/karate-netty#background

    1. 根据设计,您一次只能使用一个

    2. 鉴于上述限制,这里有一个有趣的想法:添加类似pathMatches('/__test/reset') 的额外场景,它会清理您的状态并将Background 变量设置为* def cats = [] 之类的东西。现在在每个功能中,只需在开始时调用特殊的“重置”URL。好消息是空手道是线程安全的。正如您所说的另一个想法是您可以维护两个或三个不同的变量并使用一些逻辑来基于标头“路由”,这同样非常容易 IMO。使用地图的地图,例如:

      • def 数据 = { 猫 1:{},猫 2:{},猫 3:{} }

    你可以得到标题,例如如果是mode: cats1

    * def mode = karate.get('requestHeaders.mode[0]')
    * def cats = data[mode]
    
    1. 不确定这是否回答了您的问题,但如果最后一个 Scenario 有“空”描述,则它是“全部”,理论上可以委托给另一台服务器(或模拟):https://github.com/intuit/karate/tree/develop/karate-netty#proxy-mode

    你的问题有点混乱,所以如果我不明白,你可能需要编辑和重新措辞。

    编辑:从 1.1.0 开始应该可以使用多个模拟文件:https://github.com/intuit/karate/issues/1566

    【讨论】:

    • 不,你猜对了。所以我看到了两个选项:使用单个文件或为每个测试更改文件。第二个以及您有意的重置请求意味着我不能并行运行空手道测试,对吗?
    • @tkrieger 是的,如果你重置,你不能并行,在文档中寻找@parallel=false,但我认为如果你使用内置的“路由”方法,你可以拉不并行,模拟是非常线程安全的
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多