当前位置: 首页 > news >正文

【接口自动化】Request学习笔记

目标:

• Requests 概述

• Requests 基础用法

• Requests 实用技巧

• Requests 接口自动化实践总结

Request概述

为什么用Request?

生活化比喻:

没有 requests:如同没有外卖员,一切需亲力而为。

自己去餐厅(服务器)​ 自己点餐(构造请求) ​自己等厨师做菜(服务器处理) ​自己打包带走(获取响应)

有 requests 的情况:有外卖员,告诉外卖员你要什么,外卖员帮你做,放到家门口

1. 告诉外卖员要什么(requests.get/post)​ 2. 外卖员帮你搞定一切​ 3. 送到家门口(返回数据)​ 4 # 简单方便!

代码真实场景:测试电商网站接口

没有 Requests 的情况:

# 你要手动测试用户登录接口:​ 1. 打开 Postman​ 2. 输入 URL: http://shop-xo.hctestedu.com/login​ 3. 设置请求方法: POST​ 4. 填写请求体: {"username": "test", "password": "123456"}​ 5. 点击发送​ 6. 眼睛看响应结果​ 7. 手动记录测试结果​ # 每次测试都要重复这些步骤,太麻烦了!

有 Requests 的情况:

# 自动化测试用户登录接口:​ import requests​ ​ def test_login():​ # 一键运行,自动完成所有步骤​ response = requests.post(​ "http://shop-xo.hctestedu.com/login",​ json={"username": "test", "password": "123456"}​ )​ # 自动检查结果​ assert response.status_code == 200​ assert response.json()["success"] == True​ print("✅ 登录测试通过!")​ # 运行测试​ test_login()

批量测试:requests配合pytest能进行批量测试

import requests from jsonpath import jsonpath class TestCase: # 登录 def test_login(self): global token url = 'http://shop-xo.hctestedu.com/index.php?s=/api/user/login' data = { 'accounts': 'youyi', 'pwd': '123456', "type": "username" } res = requests.post(url, data=data) token = jsonpath(res.json(), '$..token')[0] exmsg = '登录成功' sjmsg = res.json()['msg'] assert sjmsg == exmsg # 购物车接口 def test_cart(self): url = f'http://shop-xo.hctestedu.com/index.php?s=/api/cart/add' data = {"goods_id": "2", "stock": "3"} # 补充请求头,携带登录获取的token(原代码缺失,已补全) headers = {"token": token} res = requests.post(url, json=data, headers=headers) print("购物车返回的结果", res.json()) exmsj = '加入成功' sjmsg = res.json()['msg'] assert sjmsg == exmsj

工具手动测试:1个测试员 → 1小时 → 测试10个接口​

Requests自动化:1个脚本 → 10秒钟 → 测试100个接口

什么是requests?​

一句话解释:requests 是 Python 中用来发送接口请求的;做接口自动化测试必须要用它!

request 安装

pip install requests

Requests基础语法

GET - 获取数据(查看)

import requests # 浏览网页 url = "http://novel.hctestedu.com/book/qu" # try: response = requests.get(url, timeout=10) response.raise_for_status() # 检查请求是否成功 print(response.json()) # 查看返回的数据 except requests.exceptions.RequestException as e: print(f"请求发生错误: {e}")


POST - 提交数据(新增)

import requests # 模拟表单提交登录数据 data = { "username": "15574113907", "password": "123456" } # 发送POST登录请求 response = requests.post("http://novel.hctestedu.com/user/login", data=data) # 打印登录接口返回结果 print(response.json())

PUT - 更新数据(修改)

import requests # 模拟修改密码接口请求 data = { "oldPassword": "123456", # 旧密码 "newPassword1": "234567", # 新密码 "newPassword2": "234567", # 确认密码 "Authorization": "xxxxx" # 对应用户的token(鉴权用) } # 发送PUT请求修改密码 response = requests.put( "http://novel.hctestedu.com/user/updatePassword", json=data ) # 打印接口返回结果 print(response.json())

DELETE - 删除数据(删除)

import requests # 模拟删除作家接口请求 # 定义要删除的作家ID author_id = 1 # 可根据实际需求修改ID # 发送DELETE请求删除指定作家 response = requests.delete(f"http://novel.hctestedu.com/author/deleteIndex/{author_id}") # 打印接口返回结果 print(response.json())

Requests常用技巧

1.添加请求头

import requests # 定义请求头:包含内容类型、身份认证、客户端标识 headers = { "Content-Type": "application/json", # 指定请求体为JSON格式 "Authorization": "Bearer your_token", # Bearer鉴权,替换为实际token "User-Agent": "MyApp/1.0" # 客户端标识,模拟应用版本 } # 发送带请求头的GET请求 # url 需提前定义为目标接口地址,例如:url = "http://example.com/api/data" response = requests.get(url, headers=headers) # 打印接口返回结果 print(response.json())

2.传递参数

import requests # -------------------------- # 1. URL 参数(?page=1&size=10) # -------------------------- # 定义URL查询参数,用于分页查询 params = { "page": 1, # 页码:第1页 "size": 10 # 每页条数:10条 } # 发送带URL参数的GET请求 # requests会自动将params拼接到URL后,最终请求地址为:https://api.example.com/users?page=1&size=10 response = requests.get("https://api.example.com/users", params=params) # 打印接口返回结果 print(response.json()) # -------------------------- # 2. 请求体数据(表单/JSON格式) # -------------------------- # 表单格式(application/x-www-form-urlencoded) data = { "name": "John" } # JSON格式(application/json) json_data = { "name": "John" } # 表单格式POST请求示例 # response_form = requests.post("https://api.example.com/users", data=data) # JSON格式POST请求示例 # response_json = requests.post("https://api.example.com/users", json=json_data)

3.处理响应

import requests # 发送GET请求获取响应 # url 需提前定义为目标接口地址,例如:url = "https://api.example.com/users" response = requests.get(url) # 打印响应状态码:200(成功)、404(未找到)、500(服务器错误)等 print(response.status_code) # 打印原始响应文本(字符串格式) print(response.text) # 解析并打印JSON格式响应(适用于返回JSON数据的接口) print(response.json()) # 打印响应头信息(包含服务器、内容类型等元数据) print(response.headers)

4.错误处理

import requests # 目标接口地址(需提前定义) # url = "https://api.example.com/users" try: # 发送GET请求,设置5秒超时 response = requests.get(url, timeout=5) # 自动检查状态码:非200系列(如404、500)会直接抛出异常 response.raise_for_status() # 请求成功时的处理(示例) print("请求成功!") print(response.json()) except requests.exceptions.Timeout: # 捕获超时异常 print("请求超时!") except requests.exceptions.RequestException as e: # 捕获其他所有请求异常(网络错误、状态码异常等) print(f"请求失败:{e}")

Requests接口自动化总结

功能测试vs接口自动化

手动测试

# 手工接口测试流程(传统方式)

1. 打开Postman工具

2. 输入接口URL、请求参数

3. 点击「发送」按钮发起请求

4. 人工查看接口响应结果

5. 手动记录测试结果

# 核心问题:重复机械劳动,效率低且易出错

自动化测试

# 接口自动化测试流程(自动化方式)

1. 编写一次自动化测试代码

2. 一键批量执行所有接口测试用例

3. 程序自动校验接口响应结果

4. 自动生成标准化测试报告

# 核心优势:高效、准确、可重复执行

http://www.jsqmd.com/news/617727/

相关文章:

  • STIX Two字体:学术文档跨平台一致性的终极解决方案
  • 春秋云境CVE-2017-3248
  • 如何用OpenFace实现AI面部行为分析的5大核心功能?
  • 英雄联盟换肤工具R3nzSkin完全指南:如何安全使用与彻底清理
  • 做自媒体一年,我靠这3个方法解决了“选题荒”
  • 如何高效使用Venera:5个专业技巧打造你的终极漫画阅读体验
  • 小批量多品种”的生死局:TVA如何将换线成本压缩至小时级?
  • 如何用OpenHRMS人力资源管理系统实现企业数字化转型:完整指南与最佳实践
  • 从无人机到扫地机器人:拆解IMU和GPS数据融合的5个真实应用场景与选型建议
  • 电子元件常用粘合剂类型、特性与适用场景详解
  • 贵州最推荐的贵州避暑景区打卡地有哪些?2026年贵阳安顺等地区市场选择前五排名 - 十大品牌榜
  • RAG 实战:数据处理没做好,再强的模型也是“巧妇难为无米之炊“
  • DeepSeek-OCR-WEBUI应用实战:发票识别自动化处理方案
  • 第15届蓝桥杯省赛Python研究生组-D限流器
  • 5个智能功能让原神游戏体验效率倍增:BetterGI自动化助手深度解析
  • 从DiffDock到SurfDock:几何扩散模型如何一步步革新分子对接?聊聊安装与实战避坑
  • Vue 3 自定义 Hooks 的 5 个最佳实践,让你的代码更健壮
  • Qwen Pixel Art效果展示:支持‘CRT curvature’, ‘scanline opacity’, ‘halation’模拟
  • 2024最新版:Python3环境下sqlmap安装避坑指南(附快捷启动配置)
  • 【C语言】C语言入门教程 | 15章C语言基础知识自学快速入门 - xiema
  • 漫画下载终极指南:8大网站全覆盖,一键保存离线阅读
  • Windows系统-应用问题全面剖析Ⅵ:德承工控机MD-3000在Windows操作系统下[卡顿/死机]的排查与解决方法
  • 小程序核心语法:数据绑定与文本渲染基础实战
  • OpenHarmony平台FFmpeg交叉编译实战:从源码到集成全流程解析
  • Qwen3-Reranker-0.6B应用场景:AI芯片技术文档语义检索与优先级排序
  • 从棋盘识别到智能决策:OpenMV在电赛中的视觉与AI实战
  • 知识星球内容归档终极方案:5步打造个人数字图书馆
  • 彻底告别窗口混乱!Traymond:Windows系统托盘窗口管理终极方案
  • intv_ai_mk11行业落地案例:教育内容总结、电商文案生成、开发需求转代码
  • 3 分钟搞定答辩 PPT!PaperXie AI:本科生的学术汇报「开挂」神器