接口测试之文件上传

部署运行你感兴趣的模型镜像

在日常工作中,经常有上传文件功能的测试场景,因此,本文介绍两种主流编写上传文件接口测试脚本的方法。

首先,要知道文件上传的一般原理:客户端根据文件路径读取文件内容,将文件内容转换成二进制文件流的格式传输给服务端,而服务端接受客户端传过来的二进制文件流以及文件名称等信息(此时这些二进制文件流存储在内存中),然后将其写入存储空间(即磁盘中),完成上传操作,返回给客户端信息。

ok,知道原理后,开始操作。

本文将根据示例接口,编写文件上传接口脚本(示例接口demo采用python+django编写,后面会讲如何实现),接口信息如下:

接口信息:127.0.0.1:8001/case/upload_file
请求方式:post
参数名称:myfile
参数类型:file

方法1:postman编写测试脚本

a.将接口信息填入请求中,请求参数类型勾选File

在这里插入图片描述

b.点击【select Files】,调用系统文件弹窗选择文件,将文件信息赋值给接口中myfile参数

在这里插入图片描述

c.选择文件参数后,点击【send】按钮发送请求。

在这里插入图片描述

至此,请求发送完毕,查看postman接收到接口返回上传完成信息,上传文件成功出现在目录中(如下图)。

在这里插入图片描述

方法2:使用python+requests编写脚本文件

原理同postman,文件参数要使用File

注意:要传入文件所在路径

import requests

url = "http://127.0.0.1:8001/case/upload_file"
payload = {}
files = [
    ('myfile', ('测试1.mp4', open('C:\\Users\EEO\Videos\Captures\测试1.mp4', 'rb'), 'application/octet-stream'))
]
headers = {}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)

在这里插入图片描述

如图所示,文件已成功上传至服务器。

最后感谢每一个认真阅读我文章的人!作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,希望能给你前进的路上带来帮助。如果你用得到的话可以直接拿走:

软件测试资料领取:[内部资源] 想拿年薪40W+的软件测试人员,这份资料必须领取~

软件测试面试刷题工具领取:软件测试面试刷题【800道面试题+答案免费刷】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 文件上传接口测试文件内容丢失的原因及解决方案 在接口测试中,上传文件时出现文件内容丢失的问题可能由多种原因引起。以下将从常见原因及对应的解决方案进行分析。 #### 1. 文件编码问题 文件上传过程中,如果文件包含特殊字符或非标准编码格式(如中文字符、控制字符等),可能会导致文件内容被错误解析或丢失。例如,在使用 `rz` 工具上传文件时,若文件中包含控制字符,则可能导致乱码或上传失败[^2]。 **解决方案**: - 使用二进制模式上传文件以避免字符编码问题。例如,使用 `rz -be` 参数指定以二进制方式上传文件。 - 确保文件编码与系统预期一致。如果文件需要以文本形式上传,建议将其转换为 UTF-8 编码[^2]。 #### 2. 请求体格式不正确 在前端实现文件上传时,通常通过 `FormData` 对象构造请求体。如果请求体格式不符合服务器端的解析要求,可能会导致文件内容无法正确传递。例如,某些服务器可能要求 `Content-Type` 设置为 `multipart/form-data`[^1]。 **解决方案**: - 确保前端代码正确构造 `FormData` 对象,并将其作为请求体发送。以下是一个基于 JavaScript 的示例代码: ```javascript const formData = new FormData(); formData.append('file', fileInput.files[0]); // 添加文件到表单数据中 fetch('/upload', { method: 'POST', body: formData, // 发送表单数据 }); ``` - 检查服务器端是否正确配置了对 `multipart/form-data` 类型请求的解析逻辑[^3]。 #### 3. 临时文件未保存 在文件上传过程中,服务器端通常会生成一个临时文件用于存储上传的内容。如果未正确处理该临时文件,可能会导致文件内容丢失[^3]。 **解决方案**: - 在服务器端实现文件上传功能时,确保将临时文件保存到目标路径。例如,在 Python 的 Flask 框架中,可以通过以下代码实现: ```python from flask import request @app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return "No file part", 400 file = request.files['file'] if file.filename == '': return "No selected file", 400 file.save('/path/to/save/' + file.filename) # 保存文件 return "File uploaded successfully", 200 ``` #### 4. 文件大小限制 某些服务器或框架可能对上传文件的大小设置了限制。如果上传文件超出限制,可能会导致文件内容部分丢失或上传失败。 **解决方案**: - 检查服务器端是否配置了文件大小限制,并根据实际需求调整限制值。例如,在 Nginx 中可以通过以下配置修改上传文件大小限制: ```nginx client_max_body_size 10M; # 允许上传的最大文件大小为10MB ``` #### 5. 网络传输中断 在网络不稳定的情况下,文件上传过程可能会因连接中断而失败,从而导致文件内容丢失。 **解决方案**: - 在客户端实现断点续传功能,确保在网络中断后能够继续上传未完成的部分。 - 使用可靠的 HTTP 客户端库(如 Axios 或 Postman)进行接口测试,以提高网络传输的稳定性。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值