首页 > 解决方案 > Java 堆空间错误,用于响应具有巨大负载的响应 | 空手道 1.0.1

问题描述

我们目前在我们的测试框架中使用空手道 0.9.6,并且要求以某种方式将整个响应主体与存储为 json 的文件匹配(这是一个基于金融的应用程序,我们需要验证整个响应主体)

我正在尝试按照升级指南迁移到 1.0.1

在升级到 1.0.1 后,我们针对保存的响应断言的场景因 Java 堆空间错误而失败

由于安全限制,我无法将响应主体放在这里,所以我尝试使用具有大型响应主体的开源 api,但在以下用例中失败

Given url "https://jsonplaceholder.typicode.com/photos"
And json expected_resp =read('classpath:<path_to_saved_file>/response.json')
When method GET 
Then status 200
Then match response  == '#(^^expected_resp)'

在此处输入图像描述

PS:我已经把这里提到的所有步骤

标签: karate

解决方案


抱歉,没有足够的信息来复制。我尝试了以下方法并且有效:

Given url "https://jsonplaceholder.typicode.com/photos"
When method GET 
Then status 200

无论如何,我们已经打开了一个问题,但如果我们无法复制,我们会在一两天内关闭它:https ://github.com/intuit/karate/issues/1572

这是一个开源项目,我们依赖于您的贡献或至少提供更好的信息。

编辑:非常大的 JSON 数组的解决方案是对数组进行排序(现在在空手道 1.0 中很容易实现),然后进行精确匹配——这将避免进行contains匹配所需的内存。

* def sorted = karate.sort(response, x => x.id)
* match sorted == read('photos.json')

推荐阅读