fiddler抓包工具与requests库构建自动化报告
一. Fiddler 抓包工具
1.1 Fiddler 工具介绍和安装
Fiddler 是一款功能强大的 HTTP 调试代理工具,能够全面记录并深入检查您的计算机与互联网之间的 HTTP 和 HTTPS 通信数据。其主界面布局清晰,主要包含菜单栏、工具栏、树形标签栏和内容栏。
1.2 Fiddler 工具的基本结构介绍
对 Fiddler 各个组成部分的功能和作用进行详细说明:
-
菜单栏:涵盖了丰富多样的操作和功能选项,例如 File(文件)用于文件相关操作,Edit(编辑)用于编辑会话等,而 Rules(规则)则用于设置各种捕获和处理规则。
1.“File”(文件):负责文件的打开、保存、导入和导出等操作。
2.“Edit”(编辑):提供对会话的编辑功能,如复制、删除、查找等。
3.“Rules”(规则):允许自定义各种捕获和处理规则,以满足特定的调试需求。
4.“Tools”(工具):包含一些辅助工具,如文本编码转换等。
-
工具栏:集中了一系列常用功能的快捷按钮,像是“Capture Traffic”(捕获流量)按钮用于启动或停止捕获请求,“Clear Sessions”(清除会话)按钮用于一键清空捕获到的会话列表。
1.“Capture Traffic”(捕获流量):控制捕获的开始与停止。
2.“Decode”(解码):对数据进行自动解码,方便查看。
3.“Find Session”(查找会话):快速定位特定的会话。
-
树形标签栏:直观地展示了捕获到的 HTTP 会话列表,您可以依据不同的分类标准进行灵活的过滤和排序,迅速找到所需的会话。
1.以清晰的树形结构展示会话,可按进程、主机、请求类型等分类。
2.支持右键菜单进行更多操作,如重发请求等。
-
内容栏:详细呈现了选中会话的全方位信息,涵盖请求头、响应头、请求体以及响应体等关键内容。
-
“Inspectors”(检查器)标签下:
1.“Request Headers”(请求头):展示请求的头部信息,包括方法、URL、协议版本等。
2.“Response Headers”(响应头):呈现响应的头部信息,如状态码、服务器类型等。
3.“RequestBody”(请求体)和“ResponseBody”(响应体):分别显示请求和响应的具体数据内容。
-
1.3 Fiddler 工具抓包讲解
详细介绍如何运用 Fiddler 进行高效抓包操作,其中涵盖设置捕获规则(例如仅捕获特定域名的请求)、灵活启动/停止捕获等关键步骤。
1.启动捕获:轻松点击工具栏上醒目的“Capture Traffic”按钮,即刻开启捕获请求之旅。
2.设置捕获规则:通过“Rules”菜单下的“Customize Rules”选项,您能够量身定制捕获规则。比如,精准设定只捕获特定域名的请求,过滤掉无关的流量,让您的关注点更加集中。
3.停止捕获:再次点击“Capture Traffic”按钮或者运用快捷键,即可迅速停止捕获,及时定格您所需的通信数据。
1.4 Fiddler 中读接口数据进行分析
深入讲解如何在 Fiddler 中精准读取和透彻分析捕获到的接口数据,包括细致查看请求头、响应头、请求体和响应体等重要环节。
1.查看请求头:在内容栏中精心选定会话后,切换至“Inspectors”标签下的“Request Headers”部分,您将一目了然地查看请求头的丰富信息,包括请求方法、URL、客户端类型等关键细节。
2.查看响应头:同样在“Inspectors”标签下,切换至“Response Headers”部分,您能够清晰获取响应头的关键信息,如状态码、服务器类型、缓存策略等。
3.查看请求体和响应体:在“RequestBody”和“ResponseBody”部分,您可以分别深入查看请求和响应的主体内容,无论是表单数据、JSON 数据还是二进制数据,都能尽收眼底,为您的分析提供全面的数据支持。
1.5 Fiddler 常用功能讲解
全面阐述如设置断点、过滤请求、模拟请求等常见且实用功能的具体使用方法。
1.设置断点:通过“Rules”菜单下的“Breakpoints”选项,您可以巧妙设置请求或响应的断点。当数据在发送或接收过程中触及断点时,Fiddler 会自动暂停,为您提供宝贵的时机来仔细检查和修改数据,确保通信的准确性和完整性。
2.过滤请求:运用工具栏上的“Filters”按钮或者便捷的快捷键,轻松打开过滤器窗口。在这里,您可以灵活设置过滤条件,例如只显示特定主机、特定进程或者特定请求类型的会话,让您在繁杂的数据中迅速聚焦关键信息,提高工作效率。
3.模拟请求:通过“Composer”菜单下的“New Request”选项,您能够手动构建并随心所欲地发送自定义的 HTTP 请求。无论是测试新的接口、验证不同的参数组合还是模拟异常情况,都能在 Fiddler 的模拟请求功能中轻松实现,为您的开发和调试工作提供强大的支持。
1.6 Fiddler 其他常用操作及流程
修改请求和响应:在设置断点后,可以对请求头、请求体、响应头和响应体进行修改,然后点击“Run to Completion”继续发送请求或接收响应,观察修改后的效果。
操作流程:设置断点 -> 暂停会话 -> 修改数据 -> 继续执行。
保存会话:可以将捕获到的重要会话保存下来,以便后续分析或与他人分享。
操作流程:选中会话 -> 右键 -> “Save” -> 选择保存位置和格式。
导出会话数据:将捕获的会话数据导出为文本、XML 等格式。
操作流程:选择要导出的会话 -> “File” -> “Export Sessions” -> 选择导出格式和保存路径。
设置会话备注:为方便区分和记忆,可以给特定会话添加备注信息。
操作流程:选中会话 -> 右键 -> “Comment” -> 输入备注内容。
性能分析:Fiddler 可以提供关于请求响应时间等性能指标的分析。
操作流程:“Statistics”标签 -> 查看各项性能数据,如总请求数、平均响应时间等。
二. 用 requests 库实现接口测试
2.1 requests 库的介绍
requests 库是一个用于发送 HTTP 请求的 Python 库,它提供了简单易用的 API,非常适合用于接口测试。
2.2 构建 GET 和 POST 请求
import requests# GET 请求
response_get = requests.get('https://www.example.com')
print(response_get.text)# POST 请求
data = {'key1': 'value1', 'key2': 'value2'}
response_post = requests.post('https://www.example.com', data=data)
print(response_post.text)
2.3 实现接口参数化
说明如何将接口中的参数进行动态设置。
params = {'param1': 'value1', 'param2': 'value2'}
response = requests.get('https://www.example.com', params=params)
print(response.url) # 验证参数是否已正确附加到 URL 上
2.4 实现接口断言
介绍如何对接口返回的结果进行断言判断。
import requests
import unittestclass TestInterface(unittest.TestCase):def test_get_request(self):response = requests.get('https://www.example.com')self.assertEqual(response.status_code, 200) # 断言状态码为 200self.assertIn('expected_text', response.text) # 断言响应文本中包含特定内容if __name__ == '__main__':unittest.main()
2.5 实现接口关联
讲解接口之间数据传递和关联的处理方法,如从上一个接口的响应中提取数据,并作为下一个接口的请求参数。
2.6 实现 cookie、session、token 的处理
展示如何在 requests 中处理这些会话相关的元素。
# 处理 Cookie
response = requests.get('https://www.example.com', cookies={'cookie_name': 'cookie_value'})
print(response.cookies)# 处理 Session
session = requests.Session()
response = session.get('https://www.example.com')
# 在同一 session 中进行后续请求,将保持相同的 cookie 和其他会话信息
response2 = session.post('https://www.example.com/post', data={'key': 'value'})# 处理 Token
headers = {'Authorization': 'Bearer your_token'}
response = requests.get('https://www.example.com', headers=headers)
print(response.json())
2.7 介绍 unittest 框架执行用例并且生成报告
解释如何使用 unittest 框架组织和执行接口测试用例,并生成测试报告。
import unittest
from HTMLTestRunner import HTMLTestRunner
import requestsclass TestInterface(unittest.TestCase):def test_get_request(self):response = requests.get('https://www.example.com')self.assertEqual(response.status_code, 200)# 可以添加更多断言if __name__ == '__main__':suite = unittest.TestSuite()suite.addTest(TestInterface('test_get_request'))# 可以添加更多测试用例到 suite 中with open('test_report.html', 'wb') as f:runner = HTMLTestRunner(stream=f, title='Test Report', description='Interface Test')runner.run(suite)
三. Python 接口自动化测试 DDT 数据驱动
3.1 重构操作 Excel 函数
讲解如何优化和重构对 Excel 文件的操作函数,以便更高效地读取和写入测试数据。
'''
在接口自动化测试中,经常需要与 Excel 文件进行交互,读取测试数据和写入测试结果。原始的 Excel 操作函数可能存在代码冗余、可读性差等问题。重构操作 Excel 函数可以通过使用合适的库(如 `openpyxl` 或 `pandas`),将读取和写入的逻辑进行封装,提高代码的复用性和可维护性。
例如,使用 `openpyxl` 库读取 Excel 文件中的数据:
'''
from openpyxl import load_workbook
def read_excel_data(file_path, sheet_name):wb = load_workbook(file_path)sheet = wb[sheet_name]data = []for row in sheet.iter_rows(min_row=2, values_only=True):data.append(row)return data
3.2 封装获取常量的方法
介绍将常量获取进行封装的方法和好处,如将 API URL、请求头等常量封装到一个单独的模块中。
'''
将常量(如 API 的 URL、请求头、认证信息等)进行封装有诸多好处。可以将这些常量集中定义在一个模块中,方便管理和修改。
'''
#创建一个 constants.py 文件
API_URL = 'https://www.example.com/api'
REQUEST_HEADERS = {'Content-Type': 'application/json','Authorization': 'Bearer your_token'
}
3.3 封装获取接口数据
为了在多个测试用例中重复使用获取接口数据的逻辑,可以将其封装为一个函数。
import requests
def get_interface_data(url, params=None, headers=None):response = requests.get(url, params=params, headers=headers)return response.json()
3.4 POST、GET 基类封装
对 POST 和 GET 请求的基类进行封装,以便简化测试用例的编写。
class BaseRequest:def __init__(self, base_url):self.base_url = base_urldef get(self, url, params=None, headers=None):response = requests.get(f'{self.base_url}{url}', params=params, headers=headers)return responsedef post(self, url, data=None, headers=None):response = requests.post(f'{self.base_url}{url}', data=data, headers=headers)return response# 使用示例
base_request = BaseRequest('https://www.example.com/api')
response = base_request.get('/endpoint', params={'param': 'value'})
3.5 主流程封装及错误解决调试
说明接口自动化测试主流程的封装以及错误处理和调试方法,如使用 try-except 语句捕获异常,并记录错误信息。
'''
接口自动化测试的主流程通常包括发送请求、获取响应、验证结果等步骤。可以将这个主流程封装为一个函数,并在其中处理可能出现的错误。
'''
def run_test_case(url, method, data=None, params=None, expected_result=None):try:if method == 'GET':response = base_request.get(url, params=params)elif method == 'POST':response = base_request.post(url, data=data)else:raise ValueError("Invalid method")
# 验证结果if response.status_code == expected_result['status_code']:print("测试通过")else:print(f"测试失败,状态码: {response.status_code},预期: {expected_result['status_code']}")except Exception as e:print(f"出现错误: {e}")
3.6 获取接口返回状态
解释如何获取接口返回的状态信息,如状态码、响应头等。
response = requests.get('https://www.example.com/api')
status_code = response.status_code
response_headers = response.headers
3.7 通过预期结果判断 case 是否执行
介绍根据预期结果来决定测试用例是否执行的方法,如使用断言来判断实际结果是否与预期结果一致,从而决定测试用例是否通过。
import unittest
class TestCase(unittest.TestCase):def test_example(self):actual_result = get_interface_data('https://www.example.com/api')expected_result = {...} # 预期的结果self.assertEqual(actual_result['key'], expected_result['key'])
3.8 将预测结果写入到 Excel 中
展示如何将测试的预测结果写入到 Excel 文件中,以便后续分析和统计。from openpyxl import Workbook
def write_prediction_to_excel(result, file_path, sheet_name):wb = Workbook()sheet = wb.activesheet.title = sheet_name
sheet.append(['预测结果'])for item in result:sheet.append([item])
wb.save(file_path)
3.9 数据依赖问题通过 case_id 获取 case 数据
讲解如何通过 case_id 解决数据依赖问题并获取相应的测试数据,如从 Excel 文件中根据 case_id 查找对应的测试数据。
def get_case_data_by_id(case_id, file_path, sheet_name):data = read_excel_data(file_path, sheet_name)for row in data:if row[0] == case_id:#设case_id在第一列return rowreturn None
3.10 数据依赖问题之根据规则提取响应数据
说明根据特定规则从响应数据中提取所需信息的方法,如使用正则表达式或 JSON 解析来提取数据。
import re
import json
def extract_data_from_response(response, rule):if rule.startswith('/'): # 假设是 JSON 路径data = json.loads(response.text)return jsonpath.jsonpath(data, rule)elif re.match(r'\[.*\]', rule): # 假设是正则表达式return re.findall(rule, response.text)else:raise ValueError("Invalid rule")
3.11 构建发送邮件服务
介绍如何构建发送测试结果邮件的服务,如使用 smtplib 库发送邮件
import smtplib
from email.mime.text import MIMEText
def send_email(subject, body, recipient):sender = 'your_email@example.com'password = 'your_password'
msg = MIMEText(body)msg['Subject'] = subjectmsg['From'] = sendermsg['To'] = recipient
server = smtplib.SMTP('smtp.example.com', 587)server.starttls()server.login(sender, password)server.sendmail(sender, recipient, msg.as_string())server.quit()
3.12 结果统计并发送报告
结果统计及自动整理发送报告代码
import pandas as pd
def generate_report(results_file_path):data = pd.read_excel(results_file_path)passed_cases = data[data['Status'] == 'Passed'].count()['Test Case ID']failed_cases = data[data['Status'] == 'Failed'].count()['Test Case ID']
report_body = f"测试结果统计:\n通过的测试用例数:{passed_cases}\n失败的测试用例数:{failed_cases}"
send_email('测试报告', report_body, 'recipient@example.com')
先整理一下,fiddler抓包工具与requests库构建自动化报告笔记,后续继续整理更新fiddler具体操作 和JMeter ,postman , Appium 以及unittest框架的各自笔记
整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!
相关文章:
fiddler抓包工具与requests库构建自动化报告
一. Fiddler 抓包工具 1.1 Fiddler 工具介绍和安装 Fiddler 是一款功能强大的 HTTP 调试代理工具,能够全面记录并深入检查您的计算机与互联网之间的 HTTP 和 HTTPS 通信数据。其主界面布局清晰,主要包含菜单栏、工具栏、树形标签栏和内容栏。 1.2 Fid…...
Docker login 报证书存储错误的解决办法
文章目录 docker login 出现错误,提示:Error saving credentials: error storing credentials - err: exit status 1, out: Cannot autolaunch D-Bus without X11 $DISPLAY 环境 使用的是 Mint Linux ,容器为 docker-ce 最新版 1 2 3 4 $…...

【自动化Selenium】Python 网页自动化测试脚本(上)
目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 (1)ID定位 &…...
什么是MyBatis?
MyBatis简介 MyBatis是一款优秀的持久层框架,用于简化Java应用程序对数据库的操作。它曾是Apache的一个开源项目,名为iBatis,2010年迁移到Google Code并改名为MyBatis,2013年11月又迁移到了GitHub。 一、MyBatis的作用 在JavaE…...

TortoiseGit 将本地已有仓库推送到远程
TortoiseGit 将本地已有仓库推送到远程 一、创建线上仓库二、创建本地仓库三、提交内容到本地仓库四、添加远程仓库地址补充 一、创建线上仓库 在gitlab管理面页面按这前讲过的步骤创建一个空仓库。(通常我们把服务器上这个仓库叫远程仓库,把我们自己电…...

腾讯云OCR车牌识别实践:从图片上传到车牌识别
在当今智能化和自动化的浪潮中,车牌识别(LPR)技术已经广泛应用于交通管理、智能停车、自动收费等多个场景。腾讯云OCR车牌识别服务凭借其高效、精准的识别能力,为开发者提供了强大的技术支持。本文将介绍如何利用腾讯云OCR车牌识别…...

TailwindCss 总结
目录 一、简介 二、盒子模型相关 三、将样式类写到一个类里面apply 四、一款TailWind CSS的UI库 一、简介 官方文档:Width - TailwindCSS中文文档 | TailwindCSS中文网 Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类…...
Java与C#
Java和C#(C Sharp)是两种流行的面向对象编程语言,它们在很多方面非常相似,因为它们都受到了类似的编程范式和语言设计理念的影响。然而,它们之间也存在一些重要的区别。 平台依赖性: Java:Java是…...

leetcode:222完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最…...

[STM32]从零开始的STM32 FreeRTOS移植教程
一、前言 如果能看到这个教程的话,说明大家已经学习嵌入式有一段时间了。还记得嵌入式在大多数时候指的是什么吗?是的,我们所说的学习嵌入式大部分时候都是在学习嵌入式操作系统。从简单的一些任务状态机再到复杂一些的RTOS,再到最…...
java——Tomcat连接池配置NIO、BIO、APR
Tomcat连接池的配置涉及不同的IO模型,包括NIO(Non-blocking IO,非阻塞IO)、APR(Apache Portable Runtime,Apache可移植运行库)和BIO(Blocking IO,阻塞IO)。以…...
跨域相关的一些问题 ✅
当网页从一个源(https://baidu.com)请求另一个源(如 https://taobao/api)的资源时,就发生了跨域。由于安全原因(防止恶意网站通过脚本访问用户在其他网站上的数据),浏览器对跨域请求…...
RPC学习
一、什么是 RPC RPC(Remote Procedure Call),即远程过程调用,是一种计算机通信协议,它允许运行在一台计算机上的程序调用另一台计算机上的子程序或函数,就好像调用本地程序中的函数一样,无需程序…...
coe文件转mif(c语言)
1 mif文件格式 DEPTH=1024; --The size of data in bits WIDTH=16; --The size of memory in words ADDRESS_RADIX = DEC; --The radix for address values DATA_RADIX = UNS...

【leetcode】动态规划
31. 873. 最长的斐波那契子序列的长度 题目: 如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的: n > 3对于所有 i 2 < n,都有 X_i X_{i1} X_{i2} 给定一个严格递增的正整数数组形成序列 arr ࿰…...

介绍一下atoi(arr);(c基础)
hi , I am 36 适合对象c语言初学者 atoi(arr);是返回整数(int型),整数是arr数组中字符中数字 格式 #include<stdio.h> atoi(arr); 返回值arr数组中的数字 未改变arr数组 #include<stdlib.h>//atoi(arr); 返 <stdlib> int main(…...

docker入门学习笔记
docker的定义 docker是一个用于构建、运行、传送 应用程序的平台。 为什么要使用docker ? 在开发测试库环境中测试成功后,打包成集装箱,到生产环境也是能够成功的。而传统的安装方式不仅繁琐,并且在测试环境安装后,到…...

使用Python和Pybind11调用C++程序(CMake编译)
目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补,本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境: Linux gnuPython3.10…...

tableau-制作30个图表
制作条形图 步骤: 1、横轴是数值,对应了某一个度量值,纵轴是一个标签 战区的成交额,条形图横轴是战区,纵轴是成交额 下钻条形图 1、增加业务架构-战区右键点击,分层结构,增加分层结构 调整业务架构,将战区,城市,小组移动到业务架构下方 此时的条形图上方有➕号展开后…...

2024APMCM亚太杯数学建模C题【宠物行业】原创论文分享
大家好呀,从发布赛题一直到现在,总算完成了2024 年APMCM亚太地区大学生数学建模竞赛C题的成品论文。 给大家看一下目录吧: 目录 摘 要: 10 一、问题重述 14 二.问题分析 15 2.1问题一 15 2.2问题二 15 2.3问题三…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...