pytest 测试上传图片、文件

本文介绍使用pytest结合requests_toolbelt库实现图片上传接口自动化测试的方法。包括安装必要库、构造multipart/form-data请求体、发送POST请求及验证响应结果等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pytest 测试上传图片、文件

1、导入requests_toolbelt 包

2、根据抓接口进行参数赋值

3、校验返回值

from requests_toolbelt import MultipartEncoder
m= MultipartEncoder(
                fields=[('bussCode','bookCatalog'),
                        ('file',('zxz.png',open(r'C:\Users\admin\PycharmProjects\api_Project_Pytest\case\ziyuanguanli\0_pic.png','rb'),'image/png'))
                        ]
)
res =ss.post(url,data=m,headers={'Content-Type':m.content_type})

### 使用 Pytest 处理 YAML 文件中的文件上传功能 在 `pytest` 和 `yaml` 结合使用的场景下,可以通过定义 YAML 配置来描述文件上传的功能需求。以下是基于引用内容构建的一个完整的文件上传示例。 #### 示例配置 (`test_upfile.yml`) ```yaml --- name: 文件上传测试用例 request: url: http://127.0.0.1:8000/api/v1/upfile/ method: POST data: title: 文件上传 files: file: data/abc.jpg validate: - eq: [status_code, 200] - contains: ["message", "上传成功"] ``` 此 YAML 文件定义了一个用于文件上传的接口测试用例[^1]。其中: - **url**: 接口地址。 - **method**: 请求方法(POST)。 - **data**: 表单数据字段。 - **files**: 定义要上传文件及其路径。 - **validate**: 断言部分,验证响应状态码以及返回消息是否符合预期。 #### Python 实现代码 通过读取上述 YAML 文件并执行请求操作,可以完成文件上传功能的测试。 ```python import os import yaml import requests def load_yaml(file_path): """加载 YAML 文件""" with open(file_path, 'r', encoding='utf-8') as f: return yaml.safe_load(f) def run_test(case_data): """运行测试用例""" url = case_data['request']['url'] method = case_data['request']['method'].lower() data = case_data['request'].get('data', {}) files = {} # 构建文件参数 for key, value in case_data['request'].get('files', {}).items(): if not os.path.isabs(value): # 如果不是绝对路径,则拼接当前目录 value = os.path.join(os.getcwd(), value) files[key] = (os.path.basename(value), open(value, 'rb')) response = getattr(requests, method)(url, data=data, files=files) # 关闭打开的文件对象 for _, (_, file_obj) in files.items(): file_obj.close() # 验证断言 validates = case_data.get('validate', []) errors = [] for validate in validates: comparator, actual_value, expected_value = list(validate.items())[0] try: assert eval(comparator)(actual_value, expected_value), f"{comparator}: {actual_value} != {expected_value}" except AssertionError as e: errors.append(str(e)) if errors: raise AssertionError("\n".join(errors)) if __name__ == "__main__": yml_file = "./test_upfile.yml" test_case = load_yaml(yml_file) run_test(test_case) ``` 以上代码实现了以下功能: 1. 加载指定的 YAML 文件,并解析其内容。 2. 根据 YAML 中定义的数据结构发起 HTTP 请求。 3. 对于文件上传部分,动态处理文件路径并将其作为二进制流发送。 4. 执行断言逻辑以验证接口行为是否符合预期。 #### 注意事项 - 确保 YAML 文件中定义的文件路径有效。如果未提供绝对路径,则默认相对于脚本所在目录查找文件。 - 在实际应用中,可能需要扩展支持更多复杂的断言条件或日志记录机制[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值