Karate API调用GraphQL POST mutation上传图片报string is not an Upload求助
问题修复方案
错误根因
你当前的写法将mutation中imageFile参数硬编码为字符串"bud.png",但GraphQL的Upload标量类型要求接收文件流而非文件名字符串,不符合GraphQL multipart请求规范,因此触发服务端报错。
修正后的测试用例
Scenario: Upload an Avatar Given path 'query' And header Accept = 'application/json' # 读取本地图片文件,和原逻辑一致 And multipart file myFile = { read: 'bud.png', filename: 'bud.png', contentType: 'image/png' } # mutation改为使用Upload类型变量接收文件参数 Given text query = """ mutation($avatar: Upload!) { setUserAvatar(userID: "571d7a92", imageFile: $avatar){id} } """ # 请求体新增variables字段,将文件变量和读取到的myFile绑定 And request { query: '#(query)', variables: { avatar: '#(myFile)' } } When method POST Then status 200 And print response
核心修改点
- mutation定义新增
Upload类型的入参变量,替换原硬编码的文件名字符串 - 请求体新增
variables字段,将mutation变量和你读取到的本地文件对象绑定,Karate会自动按照GraphQL上传规范完成multart参数映射 - 不需要手动调整Content-Type等请求头,Karate会自动生成符合要求的multipart边界标识
内容的提问来源于stack exchange,提问作者mark quinteros
相关产品推荐
相关产品推荐

