Karate升级至1.4后responseBytes变化导致sizeOf返回-1问题咨询
Karate 1.4 获取响应字节大小的解决办法
Karate 1.4版本对responseBytes的类型做了未文档化的变更,从之前的列表数组改成了Uint8Array类的字节数组,导致原来用karate.sizeOf(responseBytes)获取字节大小的方式失效,返回值变成了-1。
这里提供几个替代方案来获取响应的字节大小:
方案1:直接访问responseBytes.length
现在responseBytes本身就是字节数组类型,直接取它的length属性就能得到准确的字节数:
And def responseSize = responseBytes.length And assert responseSize >= 10000
方案2:通过响应内容转换计算
如果需要用JavaScript方式处理,可以把响应内容编码成字节数组后取长度:
And def responseSize = new TextEncoder().encode(response).length
方案3:复用Content-Length响应头
如果服务器可靠返回了Content-Length头,可以直接提取这个值转成整数后断言:
And def contentLength = parseInt(responseHeaders['Content-Length'][0]) And assert contentLength >= 10000
注意:这个方法不适用分块传输(Transfer-Encoding: chunked)的场景。
修改后的测试脚本示例
Scenario: 00 - TESTER for STACKOVERFLOW getMedia where media type is: Video Given url 'https://www.afl.com.au/resources/v4.8.10/i/elements/afl-watermark-left.png' When method get Then status 200 And match responseHeaders['Content-Type'][0] == 'image/png' # 改用responseBytes.length获取字节大小 And def responseSize = responseBytes.length And assert responseSize >= 10000
内容的提问来源于stack exchange,提问作者Adam Tonkin
相关产品推荐
相关产品推荐

