Karate 动态场景在使用afterFeature钩子调用时冻结
当我使用afterfeaturehook调用一个特性文件进行测试清理时,会出现奇怪的行为。清理功能文件被正确调用,因为我可以看到文件的后台打印部分,但由于某些原因,场景大纲的执行会挂起 我尝试过用Junit5 runner运行该特性,也尝试过在IntelliJ IDE中右键单击该特性文件,但遇到了相同的问题,即执行挂起 这是我的主要功能文件:Karate 动态场景在使用afterFeature钩子调用时冻结,karate,Karate,当我使用afterfeaturehook调用一个特性文件进行测试清理时,会出现奇怪的行为。清理功能文件被正确调用,因为我可以看到文件的后台打印部分,但由于某些原因,场景大纲的执行会挂起 我尝试过用Junit5 runner运行该特性,也尝试过在IntelliJ IDE中右键单击该特性文件,但遇到了相同的问题,即执行挂起 这是我的主要功能文件: Feature: To test afterFeature hook Background: * def num1 = 100 *
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 |
后特征文件:
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 |
@忽略
功能:在调用功能运行完成后调用
背景:
*def dynamicData=dataForAfterFeature
*打印“dynamicATA:”+dynamicATA
场景大纲:打印动态数据
*打印id为的“从后”功能“+
示例:
|动态CDATA|
执行在场景大纲处暂停。我可以在控制台中看到dynamicData
变量的打印值,但之后什么也没有发生
大纲循环似乎没有启动或已崩溃?无法从日志中获取详细信息,因为测试尚未完成或未报告错误。我还可以检查什么,或者可能有什么问题
如果不容易复制,您建议什么样的测试清理解决方法?是的,我个人建议始终使用预清理策略,因为您无法保证调用“后”挂钩,例如,如果机器关闭 有时候,最简单的选择是在JUnit测试套件中作为普通的旧Java代码来完成这项工作。因此,在使用
Runner
之后只需一行就足够了
如果您需要跟踪您的测试所创建的动态数据,那么这会变得很棘手。我要做的是编写一个Java单例,在测试中使用它“收集”需要删除的ID,然后在JUnit类中使用它。你可以使用这样的东西
请尝试使用此处的说明进行复制:-因为这确实可能是场景大纲
中的错误
最后,您可以评估具有afterSuite()
回调的ExecutionHook
:
编辑:在1.0中-它已成为
RuntimeHook
:是的,我个人建议一种策略,始终进行预清理,因为您无法保证调用“after”hook,例如,如果机器关闭
有时候,最简单的选择是在JUnit测试套件中作为普通的旧Java代码来完成这项工作。因此,在使用Runner
之后只需一行就足够了
如果您需要跟踪您的测试所创建的动态数据,那么这会变得很棘手。我要做的是编写一个Java单例,在测试中使用它“收集”需要删除的ID,然后在JUnit类中使用它。你可以使用这样的东西
请尝试使用此处的说明进行复制:-因为这确实可能是场景大纲
中的错误
最后,您可以评估具有afterSuite()
回调的ExecutionHook
:
编辑:在1.0中-它已成为
RuntimeHook
:目前,我已经完成了以下工作,在测试功能的末尾添加了测试清理场景。我已经停止了这些测试的并行执行,老实说,我不介意这些测试不并行运行,因为它们无论如何运行起来都很快
要删除的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
现在,我已经完成了以下工作,在测试功能的末尾添加了一个测试清理场景。我已经停止了这些测试的并行执行,老实说,我不介意这些测试不并行运行,因为它们无论如何运行起来都很快 要删除的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
我会尝试其他选择。目前已实施解决方案。我将尝试其他选项。目前已经实施了一个解决方案。