【问题标题】:Java Heap space error for response with huge payload | karate 1.0.1Java 堆空间错误,用于响应具有巨大负载的响应 |空手道 1.0.1
【发布时间】:2021-07-18 12:28:32
【问题描述】:

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

我正在尝试按照upgrade guide 迁移到 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:here中提到的所有步骤我都已经完成了

【问题讨论】:

标签: karate


【解决方案1】:

抱歉,信息不足,无法复制。我尝试了以下方法并且有效:

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')

【讨论】:

  • 您是否将响应保存在文件中并在断言下方运行,我只能看到您发出了 GET 请求和 json expected_resp =read('classpath:/response.json') When 方法GET Then status 200 Then match response == '#(^^expected_resp)'
  • @KetanSethi 好的。如果您尝试了我们几个月来发布的 RC 版本,那就太好了,这样我们就可以更早地得到这个反馈。所以现在这需要时间来解决。欢迎您贡献代码或坚持使用旧版本一段时间。
  • @KetanSethi 查看解决方案,请投票/接受此答案:stackoverflow.com/help/someone-answers
  • 正如上面提到的 github 问题所讨论的,空手道在响应匹配大型 json 数组时存在问题。解决方法是使用 karate.sort 然后进行精确匹配
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 2012-04-16
  • 1970-01-01
相关资源
最近更新 更多