如何解析Multipart/form-data响应中的JSON并在Karate中做断言?
问题
我们有一个返回multipart/form-data类型响应的API(响应头content-type = multipart/form-data;boundary=c7YW4wo4MTvgK-QvlRbnRe5FMPAkY-)。响应中包含JSON数据,若关联有PDF文件,也会以multipart/form-data形式返回(PDF内容显示为乱码)。
目前在Karate回归测试套件中采用文本断言,代码如下:
And match response contains "ACTIVE" And match response contains CustomerID
希望增强JSON部分的断言逻辑,请问是否可以解析该multipart响应中的JSON,并使用Karate常规的断言方式进行验证?
解决方案
完全可以!Karate内置了对multipart响应的解析能力,你可以直接提取响应中的JSON部分并进行结构化断言,具体步骤如下:
提取并解析JSON部分
Karate会自动将multipart响应转化为列表结构,你可以通过索引定位到JSON对应的分片(通常是第一个分片,索引为0),用response[0].body获取JSON文本内容,再通过karate.fromString()将其转为可操作的JSON对象。执行结构化断言
拿到JSON对象后,就能用Karate标准的match语法做精准断言,比如验证字段值、数据类型或对象结构。
示例代码:
# 提取multipart中的JSON分片并转为JSON对象 * def jsonText = response[0].body * def jsonData = karate.fromString(jsonText) # 常规结构化断言 * match jsonData.status == "ACTIVE" * match jsonData.customerId == CustomerID # 额外验证对象结构示例 * match jsonData contains { name: '#string', contact: '#object' }
- 可选:验证PDF分片
如果需要确认PDF分片的存在,可通过对应索引访问(比如response[1]),检查其响应头的内容类型:
* match response[1].headers['Content-Type'] == 'application/pdf'
若不确定JSON分片的索引,可先打印整个响应结构确认:
* print response
内容的提问来源于stack exchange,提问作者Gopal Subramanian
相关产品推荐
相关产品推荐

