如何使用Karate框架实现Postman的Send and Download文件下载接口自动化?
使用Karate框架测试POST下载API(保留返回文件名)
完全可行,Karate框架可以轻松处理这类文件下载场景,你可以通过捕获响应头提取预填充的文件名,再将响应内容写入指定路径的文件中。以下是具体实现步骤和代码示例:
核心实现步骤
- 发送POST请求,获取完整的响应(包括响应头和二进制内容)
- 从
Content-Disposition响应头中提取API返回的文件名 - 将响应的二进制内容写入指定路径,结合提取到的文件名完成保存
代码示例
Feature: 测试POST类型Excel下载API Scenario: 发送请求并保存带原始文件名的Excel文件 Given url "你的API接口地址" # 如果API需要请求体,取消下面注释并替换为实际参数;不需要则直接删除此行 # And request { "key1": "value1", "key2": "value2" } When method post Then status 200 # 从响应头提取文件名 * def contentDisposition = responseHeaders['Content-Disposition'][0] # 适配多数API的Content-Disposition格式,若你的格式不同可调整正则 * def fileName = contentDisposition.match(/filename="?(.*?)"?;/)[1] # 指定下载路径,确保目录已存在,不存在可提前创建 * def basePath = "本地保存目录/" # 比如 "test/downloads/" * def fullPath = basePath + fileName * karate.createDir(basePath) # 自动创建目录(如果需要) # 写入文件 * karate.write(responseBody, fullPath) * print "文件已成功保存至: " + fullPath # 可选:验证文件是否存在 * assert karate.exists(fullPath)
关键说明
responseHeaders是Karate自动捕获的响应头集合,Content-Disposition头通常包含文件名信息,格式一般为attachment; filename="xxx.xlsx"或attachment; filename=xxx.xlsx,示例中的正则已适配这两种情况。responseBody在文件下载场景下会自动以二进制形式存储响应内容,直接传给karate.write()即可完成写入。- 如果需要验证文件内容的正确性,可以结合第三方库(如Apache POI)读取Excel内容做断言,但Karate本身提供的文件存在性验证已能满足基础测试需求。
内容的提问来源于stack exchange,提问作者Sanjeevan Chandrashekaran
相关产品推荐
相关产品推荐

