空手道单机版作为模拟服务器,具有多个功能文件 我尝试用空手道设置一个集成/API测试套件,并考虑使用Karate Netty来嘲弄所需的服务。对于测试设置,测试中的系统A(一个Spring Boot应用程序)完全启动。然后,空手道测试由针对该实例的Maven测试运行来执行

空手道单机版作为模拟服务器,具有多个功能文件 我尝试用空手道设置一个集成/API测试套件,并考虑使用Karate Netty来嘲弄所需的服务。对于测试设置,测试中的系统A(一个Spring Boot应用程序)完全启动。然后,空手道测试由针对该实例的Maven测试运行来执行,karate,Karate,服务A依赖于多个其他服务,这些服务需要在测试中模拟。为此,我的想法是将正在运行的KarateNetty独立实例配置为HTTP代理(由服务a的JVM参数完成) 现在我的想法是创建一个测试特性文件:xyz test.feature 此文件所需的模拟在相关的模拟功能文件中定义:xyz mock.feature (测试场景相当复杂,外部服务的响应可能会有所不同) 这意味着对于完整的测试运行,我需要加载两个模拟特性文件。因此: 多个模拟要素文件的匹配策略是什么?可以说,哪种情况会赢 有没有办法确保正确的模

服务A依赖于多个其他服务,这些服务需要在测试中模拟。为此,我的想法是将正在运行的KarateNetty独立实例配置为HTTP代理(由服务a的JVM参数完成)

现在我的想法是创建一个测试特性文件
xyz test.feature

此文件所需的模拟在相关的模拟功能文件中定义:
xyz mock.feature

(测试场景相当复杂,外部服务的响应可能会有所不同)

这意味着对于完整的测试运行,我需要加载两个模拟特性文件。因此:

  • 多个模拟要素文件的匹配策略是什么?可以说,哪种情况会赢

  • 有没有办法确保正确的模拟文件用于关联的测试文件?
    (显然,我可以重新配置正在运行的独立实例,并建议它下一步使用xyz-mock.feature。
    但这会阻止我在API测试中使用并行执行,对吗?)

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

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

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

    根据我的经验,您将能够使用一个模拟来处理所有边缘案例。这是因为空手道的方法是非传统的:您几乎可以编写一个有状态的服务器。但通过在内存中保留变量和一些巧妙的JSON路径,您可以用很少的代码行模拟CRUD:

  • 根据设计,一次只能使用一个

  • 鉴于上述限制,这里有一个有趣的想法:添加一个额外的
    路径匹配('/\uu test/reset')
    场景,该场景将清理您的状态,并将
    背景变量设置为
    *def cats=[]
    等。现在,在每个特性中,只需在开始时调用特殊的“重置”URL。好在空手道是安全的。正如您所说的另一个想法是,您可以维护两个或三个不同的变量,并使用一些逻辑根据标题“路由”,这在IMO中同样非常简单。使用地图地图,例如:

    • def数据={cats1:{},cats2:{},cats3:{}
  • 您可以获取标题,例如,如果它是
    mode:cats1

    * def mode = karate.get('requestHeaders.mode[0]')
    * def cats = data[mode]
    
  • 不确定这是否回答了您的问题,但如果最后一个
    场景
    有“空”描述,则它是一个“包罗万象”,理论上可以委托给另一个服务器(或模拟):
  • 你的问题有点让人困惑,所以如果我没听懂,你可能不得不编辑并重新措辞


    编辑:在1.1.0以后的版本中,应该可以使用多个模拟文件:

    不,我想你是对的。因此,我看到了两种选择:使用单个文件或为每个测试更改文件。第二个,也是你有意的重置请求,意味着我不能并行运行空手道测试,对吗?@tkrieger是的,如果你重置,你不能并行,在文档中查找
    @parallel=false
    ,但我认为如果你使用内置的“路由”方法,你可以并行运行,模拟是非常线程安全的