这是我们使用空手道进行测试所面临的实际场景 -
我们有一个图形 API,我们使用空手道测试它。
想象一下—— 每个空手道功能都会在图中创建父节点和子节点以验证某些业务逻辑。
然后想象有一套 100 个测试,这意味着创建了 100 个小图(数据库记录)。
我们希望清理所有这 100 个小图,以避免陈旧的测试数据污染系统。
有人可以在这里提出清理策略吗? AfterFeature 应该有助于清理,但没有用,因为任何 2 个功能之间没有状态/变量共享,即我们永远不会知道在前一个功能中创建的父母/孩子的 ID
在每个场景中为全局变量(在背景部分中定义)赋值也会被重置,并且无法维护要清理的 ID。
我个人推荐一个在开始之前删除的策略。
但我的建议是使用 Java 单例,你可以通过
karate-config.js
: 巧妙地初始化它
config.SuiteUtils = Java.type('com.myco.SuiteUtils')
每种场景都可以调用其方法。
* SuiteUtils.addId('someId')
然后您可以在 JUnit 运行程序中获取它(因为它是单例)并执行您想做的任何操作。
您可以在每个特征中调用
afterFeature
删除对应的图形。我真的不明白是什么阻止了你这样做?
或者您可以在测试完成后通过调用Java中的一些代码进行清理,以删除所有图形。如果你在
karate-config.js
中创建一个变量,我想你可以将你创建的每个节点的ID添加到这个变量中,以便知道在所有测试通过后要删除哪些节点。
面临同样的问题。有没有办法向 AfterScenario 传递参数?
因为,在后续场景中,我们在配置变量或背景变量中设置的任何 ID 都会被重置。
如果我清理 afterScenario 或 afterFeature 中的所有图表,那么我就无法进行并行化。
另外,在上面的示例中,用 karate-config.js 编写的这条语句会出错。 “config.SuiteUtils = Java.type('com.myco.SuiteUtils')”