karate - 调用空手道特征文件返回响应对象,包括父场景的先前响应对象的多个副本
问题描述
我正在研究执行复杂场景时 JAVA 堆大小的指数增长,尤其是在多个可重用场景中。这是我尝试通过简单的示例和对 JVM 堆使用的可能解释来解决问题。
环境:空手道 1.1.0.RC4 | JDK 14 | Maven 3.6.3
观察:根据以下示例,如果我们多次调用相同的场景,响应对象会呈指数增长,因为它包括来自先前调用的场景的响应以及全局变量的副本。
@unexpected
Scenario: Not over-writing nested variable
* def response = call read('classpath:examples/library.feature@getLibraryData')
* string out = response
* def resp1 = response.randomTag
* karate.log('FIRST RESPONSE SIZE = ', out.length)
* def response = call read('classpath:examples/library.feature@getLibraryData')
* string out = response
* def resp2 = response.randomTag
* karate.log('SECOND RESPONSE SIZE = ', out.length)
Output:
10:26:23.863 [main] INFO c.intuit.karate.core.FeatureRuntime - scenario called at line: 9 by tag: getLibraryData
10:26:23.875 [main] INFO c.intuit.karate.core.FeatureRuntime - scenario called at line: 14 by tag: libraryData
10:26:23.885 [main] INFO com.intuit.karate - FIRST RESPONSE SIZE = 331
10:26:23.885 [main] INFO c.intuit.karate.core.FeatureRuntime - scenario called at line: 9 by tag: getLibraryData
10:26:23.894 [main] INFO c.intuit.karate.core.FeatureRuntime - scenario called at line: 14 by tag: libraryData
10:26:23.974 [main] INFO com.intuit.karate - SECOND RESPONSE SIZE = 1783
10:26:23.974 [main] INFO c.intuit.karate.core.FeatureRuntime - scenario called at line: 9 by tag: getLibraryData
10:26:23.974 [main] INFO c.intuit.karate.core.FeatureRuntime - scenario called at line: 14 by tag: libraryData
10:26:23.988 [main] INFO com.intuit.karate - THIRD RESPONSE SIZE = 8009
- 我们真的需要在被调用的特性文件(非共享范围)的响应中包含响应和全局变量吗?
- 当我们读取大型 json 文件并调用多个可重用的场景文件时,每次读取的 json 数据的副本都会添加到响应对象中。有没有办法避免这种行为?
- 有没有更好的方法来使用可重用的场景编写复杂的测试脚本,而不需要多个相同变量的副本?
解决方案
推荐阅读
- android - 发布应用程序之前是否显示 admob 横幅?
- php - Laravel:带有队列的 Mailgun 动态发送域
- android - 在 Firebaserecycleadapter 中连接 Firebase 中的两个实体
- python - 使用 np.where 从子数组中查找元素
- sql - 当前季度的 T-SQL 工作日和当前季度过去的工作日
- c# - 任务列表循环开始偏移
- git - GIT 无法生成 askpass 克隆 Git 存储库时没有这样的文件或目录
- c# - 使用表达式交换两个对象属性值的静态方法
- python - “主人”在 tkinter 小部件中的作用是什么?
- c - ELF - 更改入口点时获取 SEGFAULT