立志成为一名优秀测试开发工程师(第九天)——使用fiddler工具、request库进行接口测试

article/2025/9/9 0:46:29

接口测试学习

目录

一、接口测试的介绍

二、抓包软件Fiddler的使用

三、使用Python的Request库发送get、post请求:

1.get请求

2.post请求

四、总结

登录接口实现

认证请求处理

异常处理

高级配置

接口测试工具类封装

测试用例设计规范

Cookie处理方案

超时与重试机制

请求构造原则

认证处理方式

响应验证维度

异常处理策略

性能优化建议


一、接口测试的介绍

接口测试的依据是接口文档(excel、word、在线文档形式)

接口分为几种:

  1. 系统内部服务层级之间(一般是白盒测试)
  2. 服务之间
  3. 系统之间(集成测试:既有白盒测试,又有黑盒测试(灰盒测试))

(集成测试:既有白盒测试,又有黑盒测试(灰盒测试))

(用户操作对应的功能的接口都需要测试)

接口测试准备:

确定需求,开发出API接口文档,编写接口测试用例,开发交付、实施接口测试

(接口测试和常规的功能测试用例基本一样,可以从接口功能、接口业务、接口安全性方面角度考虑)

主要测试的内容:

①接口每个参数的输入正确与错误

②接口缺失

③接口参数边界值

④接口参数类型

不论是性能还是业务方面都要考虑业务需求

二、抓包软件Fiddler的使用

1.安装好fiddler后进入,点击绿色小勾"Filters"

编辑Hosts,第二栏选择Show only the following Hosts,然后再下面的空白处填入要测试的网址,只需要中间部分,如“https://register.ccopyright.com.cn/registration.html”留register.ccopyright.com.cn

change not 后选择run

使用左上角“叉号”清空记录后,重新刷新:

点击进入详情

->raw:

下半部分是应该有的响应内容:

三、使用Python的Request库发送get、post请求:

1.get请求

下面我们要使用python的request库模拟发出http请求

先装库:pip install requests

接着,蓝色部分拷贝到python:从http开始:http://101.43.118.152

import requests
#发出Get请求
r=requests.get('http://101.43.118.152')#ResPonse<[200]>
print(r)#获取响应消息体内容,相应内容是文本信息,则只需要调用Text方法
print(r.text)#获取响应消息头信息,数据放在一个字典当中
print(r.headers)#获取响应状态码
print(r.status_code)

GET请求示例展示了如何发送基本HTTP GET请求并处理响应。requests库简化了HTTP请求过程,可以方便地获取响应内容、状态码和头部信息。

2.post请求
import  requests
def addNotice():url='http://101.43.118.152:8080/project'header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0','Accept':'application/json,text/plain'}payload={"id":"","projectname":"hsui","status":"暂停","startTime":"","endTime":"","memo":"asmkkld","creator":"test"}r=requests.post(url=url,headers=header,json=payload)return r.textif __name__=='__main__':print(addNotice())

POST请求分为form格式和JSON格式两种常见方式。form格式适合传统网页表单提交,JSON格式适合RESTful API交互。

data = {'key': 'value'}  # form数据
json_data = {'key': 'value'}  # JSON数据
response_form = requests.post(url, data=data)
response_json = requests.post(url, json=json_data)

四、总结

登录接口实现

标准登录实现包含完整的请求头配置和JSON请求体处理。User-Agent模拟浏览器请求,Content-Type指定JSON格式。

headers = {'User-Agent': 'Mozilla/5.0','Content-Type': 'application/json'
}
payload = {"name": "test", "password": "test123"}
response = requests.post(url, headers=headers, json=payload)

带Session的登录方式会自动管理cookies,适合需要保持会话的场景。Session对象会持久化cookies,简化后续认证请求。

session = requests.Session()
session.post(url, headers=headers, json=payload)
print(session.cookies.get_dict())
认证请求处理

Cookie认证方式直接从登录响应中获取Set-Cookie头部,并在后续请求中携带。

cookies = login_response.headers['Set-Cookie']
headers = {'Cookie': cookies}
response = requests.get(protected_url, headers=headers)

Token认证从响应JSON中提取token,使用Bearer模式进行授权。Authorization头部是标准做法。

token = response.json().get('token')
headers = {'Authorization': f'Bearer {token}'}
response = requests.get(protected_url, headers=headers)
异常处理

健壮的接口测试需要处理各种异常情况。timeout参数防止请求长时间阻塞,status_code检查确保响应正常。

try:response = requests.get(url, timeout=5)response.raise_for_status()
except requests.exceptions.RequestException as e:print(f"请求失败: {e}")
高级配置

请求可以配置代理、自定义证书等高级参数。verify参数控制SSL验证,proxies设置代理服务器。

proxies = {'http': 'http://proxy.example.com'}
response = requests.get(url, proxies=proxies, verify=False)
接口测试工具类封装

封装请求工具类可提高代码复用性和可维护性,以下是一个典型实现:

class ApiClient:def __init__(self, base_url):self.base_url = base_urlself.session = requests.Session()self.token = Nonedef login(self, username, password):url = f"{self.base_url}/account/token"payload = {"name": username,"password": password}response = self.session.post(url, json=payload)if response.status_code == 200:self.token = response.json().get('token')return Truereturn Falsedef get_projects(self):if not self.token:raise Exception("请先登录")url = f"{self.base_url}/project"headers = {'Authorization': f'Bearer {self.token}'}return self.session.get(url, headers=headers).json()
测试用例设计规范

使用unittest框架编写结构化测试用例,包含正向和反向测试:

import unittestclass TestLoginAPI(unittest.TestCase):BASE_URL = 'http://101.43.118.152:8080'def test_successful_login(self):client = ApiClient(self.BASE_URL)self.assertTrue(client.login('test', 'test123'))projects = client.get_projects()self.assertIsInstance(projects, list)def test_failed_login(self):client = ApiClient(self.BASE_URL)self.assertFalse(client.login('test', 'wrongpassword'))def test_protected_api_without_auth(self):response = requests.get(f"{self.BASE_URL}/project")self.assertEqual(response.status_code, 401)if __name__ == '__main__':unittest.main()
Cookie处理方案

管理会话状态时需注意Cookie持久化和复用:

def handle_cookies():response = requests.get('http://example.com')print(response.cookies)cookies = {'key': 'value'}requests.get('http://example.com', cookies=cookies)session = requests.Session()session.get('http://example.com/login')with open('cookies.txt', 'w') as f:f.write(str(session.cookies.get_dict()))with open('cookies.txt', 'r') as f:cookies = eval(f.read())session.cookies.update(cookies)
超时与重试机制

实现健壮的请求重试逻辑需要考虑以下因素:

from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retrydef setup_retry_session():session = requests.Session()retry = Retry(total=3,backoff_factor=1,status_forcelist=[500, 502, 503, 504])adapter = HTTPAdapter(max_retries=retry)session.mount('http://', adapter)session.mount('https://', adapter)return sessiondef reliable_request():session = setup_retry_session()try:response = session.get('http://101.43.118.152:8080/api',timeout=5)return response.json()except requests.exceptions.RequestException as e:print(f"请求失败: {e}")return None
请求构造原则

不同请求类型需采用对应参数构造方式:

  • GET请求使用params参数
  • POST请求根据Content-Type选择data或json
  • 文件上传使用files参数
认证处理方式

常见认证方案实现要点:

  • Cookie认证通过cookies参数或Session管理
  • Token认证添加到Authorization请求头
  • Basic Auth使用auth参数组合
响应验证维度

完整响应验证应包含三个层面:

  • 状态码验证(200、400、401、500等)
  • 响应头验证(Content-Type、Set-Cookie等)
  • 响应体验证(JSON结构、字段值、错误信息)
异常处理策略

必须捕获的异常类型包括:

  • 网络超时(ConnectTimeout、ReadTimeout)
  • HTTP错误(HTTPError)
  • JSON解析错误(JSONDecodeError)
性能优化建议

提升测试效率的关键措施:

  • 使用Session复用TCP连接
  • 合理设置超时时间
  • 实现重试机制保证稳定性

http://www.hkcw.cn/article/OyBsZprOnq.shtml

相关文章

【面板数据】各地区新型数字基础设施数据集(2002-2025年)

新型数字基础设施是利用新一代信息技术&#xff08;如5G、人工智能、物联网、大数据、区块链等&#xff09;构建的基础设施体系&#xff0c;主要服务于信息传输、计算存储、智能分析和融合应用等环节。新型数字基础设施作为引领经济社会数字化转型的重要支撑&#xff0c;在各地…

小程序 - 视图与逻辑

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言: “心有多大,舞台就有多大。” 📚推荐学习: 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒T…

zynq ad7616 调试笔记

环境 zynq7020 ps端的spi外接硬件的ad7616模块&#xff08;非ip核&#xff09; 1 下载 https://github.com/analogdevicesinc/no-OS/blob/2019_R1/ad7616-sdz/ad7616_sdz.c 2 在zynq的sdk中新建ad7616的app程序&#xff0c;将上图方框中的文件拷贝过来并编译 3 移植 ad7616…

如何轻松将 iPhone 备份到外部硬盘

当您的iPhone和电脑上的存储空间有限时&#xff0c;您可能希望将iPhone备份到外部硬盘上&#xff0c;这样可以快速释放iPhone上的存储空间&#xff0c;而不占用电脑上的空间&#xff0c;并为您的数据提供额外的安全性。此外&#xff0c;我们还提供 4 种有效的解决方案&#xff…

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew&#xff0c;这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew&#xff0c;请先安装它。安装 Homebrew 后&#xff0c;安装 OpenSSL 只需要一条命令。 步骤 1&#xff1a;安装 Home…

Socket编程基础

这篇博客我们主要用来讲解TCP和UDP的socket编程。 概念 大多数网络协议都是由软件实现的&#xff08;特别是协议栈中的高层协议&#xff09;&#xff0c;而且绝大多数计算机系统都将运输层以下的网络协议在操作系统的内核中进行实现。应用程序要想执行网络操作&#xff0c;必…

什么是物化视图(Materialized View)?

分析师和工程师经常面临一个共同的困境&#xff1a;随着数据量激增&#xff0c;查询性能急剧下降。一个看似简单的多表联合查询可能需要耗时数分钟甚至数小时&#xff0c;一个常规的实时大屏可能因数据处理缓慢而失去时效价值。当数据规模从 GB 级增长到 TB 甚至 PB 级时&#…

USB Redirector对比国产USB Server方案:软硬之争与技术突围

在远程设备共享领域&#xff0c;‌USB Redirector‌以其轻量级跨平台特性长期占据国际主流市场&#xff0c;支持Windows/Linux系统下的无缝USB设备网络共享。然而&#xff0c;随着国产化替代需求的爆发&#xff0c;以‌朝天椒USB Server‌为代表的软硬一体化方案&#xff0c;凭…

PP-OCRv5 C++封装DLL C#调用源码分享

目录 说明 效果 C#调用效果 项目 C# C 头文件 源文件 C#调用 下载 说明 C封装DLL&#xff0c;C#调用源码分享 效果 C#调用效果 项目 C# C 头文件 #include <windows.h> #include <iostream> #include <opencv2/opencv.hpp> #include <stri…

RISC-V PMA、PMP机制深入分析

1 PMA PMA&#xff08;Physical Memory Attributes&#xff09;&#xff0c;物理内存属性&#xff0c;顾名思义就是用来设置物理内存属性的&#xff0c;但这里说“设置”&#xff0c;并不合理&#xff0c;因为一般情况下各存储的属性&#xff0c;在芯片设计时就固定了&#xf…

桂花网体育运动监测方案:开启幼儿园运动健康管理新篇章

在幼儿教育领域&#xff0c;运动能力的培养与健康监测始终是备受关注的核心环节。随着科技的飞速发展&#xff0c;如何科学、有效地监测幼儿的运动状态&#xff0c;成为了幼儿园教育者面临的一大挑战。桂花网体育运动监测方案凭借其高效、精准、智能化的特性&#xff0c;为幼儿…

第6讲、 Odoo 18 `tools` 模块深度分析

Odoo 18 中的 odoo/tools 目录是核心工具模块的集合&#xff0c;封装了大量通用功能&#xff0c;包括数据处理、安全校验、缓存优化、文件处理、时间转换、国际化、多线程处理等。这些工具模块在整个 Odoo 框架中被频繁引用&#xff0c;是系统高效运行和代码解耦的重要基础。 &…

如何在矩池云实例上开启应用服务的访问端口

AI 应用开发越来越火热&#xff0c;矩池云平台上也相应出现了越来越多的 AI 应用开发者&#xff0c;这里详细介绍下大家在使用过程中经常遇到的一个问题&#xff1a;在矩池云的实例上&#xff0c;如何为应用服务开启外部可访问的端口&#xff1f; 根据开发者有没有启动实例&…

首发支持! 基于昇腾MindIE玩转InternVL3多模态理解最新模型

2025年4月16日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;升级并开源了通用多模态大模型书生万象3.0&#xff08;InternVL3&#xff09;。通过采用创新的多模态预训练和后训练方法&#xff0c;InternVL3 多模态基础能力全面提升&#xff0c;在专家级基…

深入解析Java8核心新特性(Optional、新的日期时间API、接口增强)

文章目录 前言一、Optional&#xff1a;优雅处理null1.1 Optional设计哲学1.2 Optional基础操作1.3 Optional链式操作1.4 高级应用1.5 Optional实战案例 二、新的日期时间API&#xff1a;解决历史痛点2.1 java.time 设计哲学与核心架构2.2 核心类详解与使用基本日期时间类时区相…

深入理解C#中的委托与事件:从基础到高级应用

在C#编程语言中&#xff0c;委托和事件是两个强大且独特的特性&#xff0c;它们为方法封装、回调机制和事件驱动编程提供了语言级别的支持。作为.NET框架的核心组件&#xff0c;委托和事件广泛应用于Windows Forms、WPF、ASP.NET等各类应用程序中。本文将全面探讨委托与事件的概…

设备制造行业项目管理难点解析,如何有效解决?

在设备制造行业&#xff0c;项目管理是企业运营的核心环节&#xff0c;直接影响项目交付效率、成本控制和盈利能力。然而&#xff0c;由于行业特性复杂、项目周期长、涉及部门多&#xff0c;企业在实际操作中常常面临诸多管理痛点。金众诚工程项目管理系统&#xff0c;依托金蝶…

如何应对客户对项目进度的过度干预

当客户对项目进度进行过度干预时&#xff0c;企业应采取明确项目边界、建立透明沟通机制、提升客户信任感、提供详实进度报告等措施。其中&#xff0c;明确项目边界尤为关键&#xff0c;它能有效帮助企业和客户共同确认项目的权责范围&#xff0c;防止客户的过度干预影响项目整…

11:QT界面设计—模态UI对话框

1.模态UI对话框 1.创建dialog的界面模板 2.进行模板界面设计 3.在主程序调用此界面 需要包含此类和实例化此类&#xff0c;然后调用下面的程序m_pShapeMatch->setModal(false); //如果改为true&#xff0c;则弹出对话框之后无法进行其它操作m_pShapeMatch->show(); 2.…

重温经典算法——选择排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 选择排序属于简单的原地排序算法&#xff0c;通过将待排序序列分为已排序和未排序两部分&#xff0c;每次从未排序部分选择最小元素&#xff0c;与未排序部分的起…