Python接口自动化测试教程_requests与pytest整合实践
发布时间 - 2025-12-30 00:00:00 点击率:次requests 负责稳定发请求,统一管理 base_url、headers,复用 session,及时校验 status_code 和响应类型;pytest 通过 parametrize、fixture 和原生 assert 实现高效用例组织与清晰断言;数据与代码分离,配置、数据、逻辑分层管理。
用 requests 发请求、用 pytest 管理用例和断言,是 Py
thon 接口自动化最轻量也最常用的组合。核心不在于工具多炫,而在于结构清晰、数据可维护、结果可读。
requests 负责“把请求发出去”
requests 是 HTTP 客户端库,专注封装网络交互细节。它不处理测试逻辑,但必须用得稳、用得巧:
- 统一管理 base_url 和 headers(比如鉴权 token),避免每个请求都重复写
- 用 session 复用连接,提升并发下稳定性;登录态也能自动携带
- 响应返回后立刻检查 status_code,失败时主动 raise 异常,不让错误静默穿透到断言层
- 对 JSON 响应,用
r.json()提取数据;非 JSON 类型(如图片、文件流)需单独判断 content-type 再处理
pytest 负责“把用例跑清楚”
pytest 不是单纯执行器,而是测试组织中枢。合理使用它的机制,能让接口测试更高效:
- 用
@pytest.mark.parametrize驱动多组参数(如不同手机号、密码组合),一份代码覆盖多种输入 - 用 fixture 封装前置动作(如获取 token、清理测试数据),避免重复代码,且支持作用域控制(session/function/module)
- 断言直接用 Python 原生
assert,配合 pytest 的详细报错信息,能快速定位字段名错、类型不符、值偏差等问题 - 用
pytest -v --tb=short运行,输出简洁可读;加--html=report.html(需 pytest-html 插件)生成带通过率的网页报告
数据与用例分离,别把 URL 和参数写死在代码里
硬编码让测试难以维护。推荐分层管理:
-
配置文件(如
config.py)存环境地址、超时时间、全局 headers - 数据文件(如
test_data/login.yaml)存请求体、期望状态码、关键响应字段断言路径 - 测试函数只负责“调用封装好的请求方法 + 断言提取出的数据”,逻辑干净,改数据不碰代码
一个最小可运行示例
假设测试登录接口 POST /api/v1/login:
# conftest.py import pytest import requests@pytest.fixture(scope="session") def base_url(): return "https://www./link/54eee489199af89e199cb5cc4d203e04"
@pytest.fixture def session(base_url): s = requests.Session() s.headers.update({"Content-Type": "application/json"}) return s
test_login.py
def test_user_login(session, base_url): payload = {"username": "test", "password": "123456"} r = session.post(f"{base_url}/api/v1/login", json=payload) assert r.status_code == 200 data = r.json() assert data["code"] == 0 assert "token" in data["data"]
# word
# python
# html
# js
# json
# 编码
# app
# 工具
# session
# ai
# 配置文件
# 状态码
# 作用域
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
QQ浏览器网页版登录入口 个人中心在线进入
开心动漫网站制作软件下载,十分开心动画为何停播?
IOS倒计时设置UIButton标题title的抖动问题
Bootstrap整体框架之JavaScript插件架构
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何选择PHP开源工具快速搭建网站?
深入理解Android中的xmlns:tools属性
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
创业网站制作流程,创业网站可靠吗?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Python正则表达式进阶教程_复杂匹配与分组替换解析
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
制作电商网页,电商供应链怎么做?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel怎么使用artisan命令缓存配置和视图
教你用AI将一段旋律扩展成一首完整的曲子
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel如何使用Livewire构建动态组件?(入门代码)
Python文本处理实践_日志清洗解析【指导】
WEB开发之注册页面验证码倒计时代码的实现
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
北京企业网站设计制作公司,北京铁路集团官方网站?
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
高防服务器如何保障网站安全无虞?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
简单实现jsp分页
PHP 500报错的快速解决方法
Java垃圾回收器的方法和原理总结
HTML 中如何正确使用模板变量为元素的 name 属性赋值
如何用5美元大硬盘VPS安全高效搭建个人网站?
Python函数文档自动校验_规范解析【教程】
深圳网站制作的公司有哪些,dido官方网站?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制

