Python接口自动化测试教程_requests与pytest整合实践

发布时间 - 2025-12-30 00:00:00    点击率:
requests 负责稳定发请求,统一管理 base_url、headers,复用 session,及时校验 status_code 和响应类型;pytest 通过 parametrize、fixture 和原生 assert 实现高效用例组织与清晰断言;数据与代码分离,配置、数据、逻辑分层管理。

requests 发请求、用 pytest 管理用例和断言,是 Python 接口自动化最轻量也最常用的组合。核心不在于工具多炫,而在于结构清晰、数据可维护、结果可读。

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角色权限管理机制