使用包含长整型的JSON对象获取k6响应

fruv7luv  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(97)

在性能测试期间,当我收到包含以下项的响应时,我会遇到问题:

{"item":{"id":2733382000000000049}}

字符串
k6 response.json()将其解析为:

{"item":{"id":2733382000000000000}}


所以它将最后一位替换为0。另外,如果我尝试记录response.body(),我会得到:

ERRO[0001] TypeError: Value is not an object: {"item":{"id":2733382000000000049}}


JavaScript可以安全使用的最大整数要小得多:

> console.log(Number.MAX_SAFE_INTEGER)
9007199254740991


那么有没有办法在不改变后端代码的情况下在k6中绕过这个问题呢?

mfuanj7w

mfuanj7w1#

使用response.text()代替,那么你可能可以做一些事情

// text would be the result of response.text()
const text = '{"item":{"id":2733382000000000049}}'
const fix = text.replace(/(\d{15,})/g, '"$1"');
console.log(JSON.parse(fix))

字符串
由于我不知道您实际得到的JSON的其余部分,这可能是一个非常幼稚的解决方案。
根据你所展示的,它会工作。

wwodge7n

wwodge7n2#

一个解决方案是:
预处理来自API的字符串,以便在解析之前将其转换为字符串。您也可以根据自己的需要将其转换回数字。下面是将字符串中的所有数字(以:开头)转换为字符串的RegExp:

// convert all number fields into strings to maintain precision
 // : 922271061845347495, => : "922271061845347495",
 stringFromApi = stringFromApi.replace(/:\s*(-?\d+),/g, ': "$1",');

字符串
Regex解释:
\s* 任意数量的空格

  • ?一个或零个“-”符号(支持负数)
    \d+一个或多个数字
    (...)将被放入1美元变量中

相关问题