提问者:小点点

动态场景在使用后功能钩子调用时冻结


当我调用一个特征文件进行测试清理时,我的行为很奇怪。清理功能文件被正确调用,因为我可以从文件的背景部分看到打印,但由于某种原因,场景大纲的执行挂起。

我尝试过使用Junit5运行器运行功能,也在IntelliJIDE通过右键单击功能文件,但得到相同的问题,执行挂起。

这是我的主要功能文件:

Feature: To test afterFeature hook

  Background:
    * def num1 = 100
    * def num2 = 200
    * def num3 = 300

    * def dataForAfterFeature =
    """
    [
      {"id":'#(num1)'},
      {"id":'#(num2)'},
      {"id":'#(num3)'}
    ]
    """
  * configure afterFeature = function(){ karate.call('after.feature'); }

  Scenario: Test 1
    * print 'Hello World 1'

  Scenario: Test 2
    * print 'Hello World 2'

后功能文件:

@ignore

Feature: Called after calling feature run is completed

  Background:
    * def dynamicData = dataForAfterFeature
    * print 'dynamicData: ' + dynamicData

  Scenario Outline: Print dynamic data
    * print 'From after feature for id: ' + <id>

    Examples:
    | dynamicData |

执行在场景大纲处停止。我可以在控制台中看到DynamicData变量的打印值,但之后没有发生任何事情。

似乎大纲循环未启动或已崩溃?无法从日志中获取详细信息,因为测试尚未完成或没有报告错误。我还可以检查什么或可能是什么问题?

如果不容易重现,您推荐什么测试清理解决方法?


共2个答案

匿名用户

目前,我已经完成了以下解决方法,在具有测试的功能的末尾添加了一个测试清理场景。已经停止了这些测试的并行执行,老实说,我不介意这些测试不并行运行,因为它们无论如何都运行得很快。

要删除的ID:

* def idsToDelete =
    """
      [
        101,
        102,
        103
      ]
   """

测试清理场景:

# Test data clean-up scenario
  Scenario: Delete test data
    # Js method to call delete data feature.
    * def deleteTestDataFun =
    """
      function(x) {
        var temp = [x];
        // Call to feature. Pass argument as json object.
        karate.call('delete-test-data.feature', { id: temp });
      }
    """
    * karate.forEach(idsToDelete, deleteTestDataFun)

调用删除测试数据场景并将需要删除的id列表传递给它。

删除测试数据功能:

Feature: To delete test data

  Background:
    * def idVal = id

  Scenario: Delete 
    Given path 'tests', 'delete', idVal
    Then method delete

匿名用户

是的,我个人推荐一种总是预先清理的策略,因为你不能保证调用“之后”钩子,例如,如果机器关闭。

有时最简单的选择是在您的JUnit测试套件中作为普通的旧Java代码来执行此操作。所以在使用Runner之后,也许一行就足够了。

如果您需要跟踪测试创建的动态数据,这会变得很棘手。我要做的是编写一个Java单例,在您的测试中使用它来“收集”需要删除的ID,然后在您的JUnit类中使用它。您可以使用@AfterClass之类的东西。

请尝试使用此处的说明进行复制:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue-因为这确实可能是场景大纲的bug。

最后,您可以评估ExecutionHook,它有一个后Suite()回调:https://github.com/intuit/karate/issues/970#issuecomment-557443551

编辑:在1.0中-它已成为RuntimeHook:https://github.com/intuit/karate/wiki/1.0-upgrade-guide#hooks