使用Tavern通过AWS预签名URL上传S3文件失败求助
解决Tavern测试S3预签名URL上传时的表单字段识别问题
你遇到的问题根源很明确:Tavern里的files字段是专门用来指定要上传的文件的,而你把key、x-amz-algorithm这些普通的multipart表单字段也放到了files下面,Tavern会默认把它们当作文件路径去查找,自然就会报“文件找不到”的错误。
正确的测试用例写法
你需要把普通的表单字段(比如key、所有x-amz-*字段、policy)放到data字段下,只把真正要上传的file字段留在files里,这样Tavern就会正确区分普通表单数据和文件上传部分,和你原本的cURL请求完全对应:
stages: - name: UPLOAD A FILE TO S3 request: method: POST url: "https://<bucket>.s3.amazonaws.com/" data: key: target.zip x-amz-algorithm: *** x-amz-credential: *** x-amz-date: *** x-amz-security-token: *** policy: *** x-amz-signature: *** files: file: '@target.zip' response: status_code: 200
为什么这样写是对的?
回顾你用的cURL命令:
-F key=<filename>.zip这类不带@的参数,本质是在multipart/form-data里添加普通表单键值对,对应Tavern的data字段;-F file=@<filename>.zip带@的参数才是指定要上传的文件,对应Tavern的files字段。
这样拆分后,Tavern会自动构造正确的multipart/form-data请求,既包含所有必要的签名验证字段,也会正确读取并上传你的zip文件。
这个场景完全可以在Tavern中实现,只是你之前混淆了data和files字段的用途~
内容的提问来源于stack exchange,提问作者Rshad Zhran
相关产品推荐
相关产品推荐

