Karate 重复使用要素文件,并重试,直到

Karate 重复使用要素文件,并重试,直到,karate,intuit,Karate,Intuit,在空手道方面取得了惊人的成功。处理在GETs上使用“重试直到”超时的端到端测试,以便在响应正文中等待特定的参数值。当被测系统中的数据处理完成时,参数的状态预计将从A变为B。有兴趣了解模式,因为每个API路线都有一个功能的标准化模型。然而,只有当我们能够参数化重试直到术语时,这才是可能的。否则,这将意味着编写多个功能以支持不同的重试组合 ---重复使用注释中的重试直到的示例--- 要维护单个get_notification_ref.功能,而不是每个until组合使用一个,请在调用中提供外部unti

在空手道方面取得了惊人的成功。处理在GETs上使用“重试直到”超时的端到端测试,以便在响应正文中等待特定的参数值。当被测系统中的数据处理完成时,参数的状态预计将从A变为B。有兴趣了解模式,因为每个API路线都有一个
功能的标准化模型。然而,只有当我们能够参数化
重试直到
术语时,这才是可能的。否则,这将意味着编写多个功能以支持不同的重试组合

---重复使用注释中的
重试直到
的示例---

要维护单个
get_notification_ref.功能,而不是每个
until
组合使用一个,请在调用中提供外部
until
参数,该参数可由.feature中的
重试
使用

依赖于在.feature文件中指定until参数的实现。对于每个重试组合,最后都会得到通知功能文件:

Scenario: Get notification & wait for status
   * call read('classpath:NotifyV1/get_notification_ref_wait_status.feature')
   .
   .

Scenario: Get notification & wait for status indicator colour
   * def expectedColour = 'GREEN'
   * call read('classpath:NotifyV1/get_notification_ref_wait_colour.feature')
Scenario: Get notification & wait for status 200
   * call read('classpath:NotifyV1/get_notification_ref.feature')
   .
   .

Scenario: Get notification & wait for status 200 and indicator colour
   * def UntilTerm = function(response){ return karate.match(response, '{statusColour: "GREEN"}').pass }
   * call read('classpath:NotifyV1/get_notification_ref.feature')
获取\u通知\u参考\u等待\u状态功能

Scenario: Get notification and wait on response status = 200
    Given path 'notification', notificationTypeReference
    And retry until responseStatus == 200
    When method get
    * def notificationResponse = $
获取\u通知\u参考\u等待\u颜色功能

Scenario: Get notification and wait on response status = 200 and colour
    Given path 'notification', notificationTypeReference
    And retry until responseStatus == 200 && response.statusColour == expectedColour
    When method get
    * def notificationResponse = $
可以处理参数化重试直到的上述实现如下所示-注意,现在只有一个GET通知功能文件:

Scenario: Get notification & wait for status
   * call read('classpath:NotifyV1/get_notification_ref_wait_status.feature')
   .
   .

Scenario: Get notification & wait for status indicator colour
   * def expectedColour = 'GREEN'
   * call read('classpath:NotifyV1/get_notification_ref_wait_colour.feature')
Scenario: Get notification & wait for status 200
   * call read('classpath:NotifyV1/get_notification_ref.feature')
   .
   .

Scenario: Get notification & wait for status 200 and indicator colour
   * def UntilTerm = function(response){ return karate.match(response, '{statusColour: "GREEN"}').pass }
   * call read('classpath:NotifyV1/get_notification_ref.feature')
获取\u通知\u参考功能

Scenario: Get notification
    * def untilTerm = karate.get('UntilTerm') ? UntilTerm : function(response){ return true }
    * def untilStatus = karate.get('UntilStatus') ? UntilStatus : 200
    Given path 'notification', notificationTypeReference
    And retry until responseStatus == untilStatus && untilTerm(response)
    When method get
    * def notificationResponse = $
    * karate.set('UntilTerm',null)
    * karate.set('UntilStatus',null)

我想说的是,在
可能足够的时候重试。由于您可以调整默认时间和间隔,因此即使在需要时(即特定HTTP调用),您也可以进行不同的设置:


除非你真的有办法让外部进程回叫——在这种情况下,你可以看看
karate.signal()
和朋友。否则,我认为您最好坚持
重试,直到

谢谢。我们将研究如何保持重试配置的可维护性我们的每个API路由都位于一个单独的.feature中。因此,我们不希望每个API路由都有一个变体。如果调用场景只需要“重试直到responseStatus==200”,而另一个场景同时需要“重试直到responseStatus==200&&response.color==绿色”,则此功能将不复存在。在调用“retry until”之前是否有编译until术语的自由度,例如,有点像查询生成器?@mactwixs不确定我是否理解。如果有帮助的话,你可以使用一个预定义的函数:用一个例子更新原始文章。我不想把它塞进注释行。你能确认如何重试直到treats null(如果我们要参数化上面的例子)吗?谢谢