韩城做网站网络推广服务
2026/3/27 4:48:43 网站建设 项目流程
韩城做网站,网络推广服务,云和建设局网站,专业网站开发公司接口自动化测试是提升测试效率的关键#xff0c;而Python的requests库因其简洁易用、功能强大#xff0c;成为测试工程师的“瑞士军刀”。 但你是否还在用requests.get()和requests.post()写重复代码#xff1f;是否遇到过文件上传失败、Cookie管理混乱、响应断言复杂的问题…接口自动化测试是提升测试效率的关键而Python的requests库因其简洁易用、功能强大成为测试工程师的“瑞士军刀”。但你是否还在用requests.get()和requests.post()写重复代码是否遇到过文件上传失败、Cookie管理混乱、响应断言复杂的问题本文从零到一拆解requests库的进阶用法手把手教你打造高可用的接口自动化框架一、requests库的“核心六式”1. 基础请求GET/POST轻松上手import requests # GET请求查询用户列表 response requests.get( urlhttps://api.example.com/users, params{page: 1, size: 10} # 自动拼接URL参数 ) # POST请求创建新用户 payload {name: 测试君, role: tester} response requests.post( urlhttps://api.example.com/users, jsonpayload # 自动设置Content-Type为application/json ) print(response.status_code) # 状态码 print(response.json()) # 解析JSON响应2. 会话管理保持登录态Session对象痛点每次请求手动传Cookie/Token太麻烦解决用Session对象自动保持会话# 登录并保持会话 with requests.Session() as s: login_data {username: admin, password: test123} s.post(https://api.example.com/login, datalogin_data) # 后续请求自动携带Cookie profile s.get(https://api.example.com/profile) print(profile.json())3. 文件上传测试文件接口必备# 上传图片文件 files {file: open(test_image.jpg, rb)} # 二进制模式打开 response requests.post( https://api.example.com/upload, filesfiles, headers{Authorization: Bearer xyz123} ) # 多文件上传如测试批量导入 multiple_files [ (files, (report1.xlsx, open(report1.xlsx, rb))), (files, (report2.xlsx, open(report2.xlsx, rb))) ] response requests.post(url, filesmultiple_files)4. 超时与重试提升测试稳定性​​​​​​​# 设置超时连接超时3秒读取超时10秒 try: response requests.get( https://api.example.com/data, timeout(3, 10) ) except requests.exceptions.Timeout: print(请求超时请检查网络或服务状态) # 自动重试需安装requests-retry库 from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry retry_strategy Retry( total3, # 最大重试次数 status_forcelist[500, 502, 503, 504], # 遇到这些状态码重试 backoff_factor1 # 重试等待时间间隔 ) adapter HTTPAdapter(max_retriesretry_strategy) session requests.Session() session.mount(https://, adapter) response session.get(url)5. 响应断言自动化测试的灵魂​​​​​​​# 断言状态码和关键字段 assert response.status_code 200, f状态码异常{response.status_code} response_data response.json() assert response_data[code] 0, 接口返回错误码 assert user_id in response_data[data], 未返回用户ID assert len(response_data[data][roles]) 1, 用户角色至少一个 # 使用JSON Schema验证数据结构需安装jsonschema库 schema { type: object, properties: { code: {type: number}, data: { type: object, properties: { user_id: {type: string}, roles: {type: array} }, required: [user_id] } }, required: [code, data] } import jsonschema jsonschema.validate(instanceresponse_data, schemaschema)6. 高级配置代理、SSL验证与Mock​​​​​​​# 设置代理用于测试环境隔离或抓包调试 proxies { http: http://10.10.1.10:3128, https: http://10.10.1.10:1080 } requests.get(https://api.example.com, proxiesproxies) # 禁用SSL证书验证测试环境临时使用生产环境慎用 response requests.get(url, verifyFalse) # 结合Mock服务如使用pytest-mock def test_api(mocker): mock_response mocker.Mock() mock_response.json.return_value {code: 0, data: mocked} mocker.patch(requests.get, return_valuemock_response) result requests.get(https://api.example.com) assert result.json()[code] 0二、接口自动化框架设计实战1. 封装工具类拒绝重复代码​​​​​​​class APIClient: def __init__(self, base_url): self.base_url base_url self.session requests.Session() self.session.headers.update({User-Agent: AutoTest/1.0}) def get(self, path, paramsNone): url f{self.base_url}{path} return self.session.get(url, paramsparams) def post_json(self, path, data): url f{self.base_url}{path} return self.session.post(url, jsondata) # 使用示例 client APIClient(https://api.example.com) response client.post_json(/users, {name: 测试员})2. 参数化测试数据驱动​​​​​​​import pytest test_data [ (正常登录, {username: admin, password: 123456}, 200), (密码错误, {username: admin, password: wrong}, 401), (用户名为空, {username: , password: 123456}, 400) ] pytest.mark.parametrize(case_name, data, expected_code, test_data) def test_login(case_name, data, expected_code): response requests.post(https://api.example.com/login, jsondata) assert response.status_code expected_code, f用例失败{case_name}3. 测试报告生成Allure集成​​​​​​​import allure allure.title(测试创建用户接口) def test_create_user(): with allure.step(步骤1准备测试数据): payload {name: 接口测试用户} with allure.step(步骤2发送POST请求): response requests.post(url, jsonpayload) with allure.step(步骤3验证响应结果): assert response.status_code 201 assert response.json()[id] is not None三、常见坑点与解决方案❌ 坑1响应内容乱码原因服务器返回的编码与requests自动检测不一致。解决手动指定编码response.encoding utf-8 # 或 gbk print(response.text)❌ 坑2文件上传接口报错排查检查是否以二进制模式rb打开文件且服务端要求的字段名是否正确。❌ 坑3Cookie失效问题解决使用Session对象保持会话或定期刷新Token。四、拓展接口性能监控小技巧​​​​​​​import time start_time time.time() response requests.get(https://api.example.com/heavy-api) end_time time.time() assert end_time - start_time 2.0, f接口响应超时{end_time - start_time}秒 print(f接口响应时间{round(end_time - start_time, 2)}秒)最后下方这份完整的软件测试视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】​​​软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询