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 请求

python 复制代码
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 实现接口参数化

说明如何将接口中的参数进行动态设置。

python 复制代码
params = {'param1': 'value1', 'param2': 'value2'}
response = requests.get('https://www.example.com', params=params)
print(response.url)  # 验证参数是否已正确附加到 URL 上

2.4 实现接口断言

介绍如何对接口返回的结果进行断言判断。

python 复制代码
import requests
import unittest
 
class TestInterface(unittest.TestCase):
    def test_get_request(self):
        response = requests.get('https://www.example.com')
        self.assertEqual(response.status_code, 200)  # 断言状态码为 200
        self.assertIn('expected_text', response.text)  # 断言响应文本中包含特定内容
 
if __name__ == '__main__':
    unittest.main()

2.5 实现接口关联

讲解接口之间数据传递和关联的处理方法,如从上一个接口的响应中提取数据,并作为下一个接口的请求参数。

2.6 实现 cookie、session、token 的处理

展示如何在 requests 中处理这些会话相关的元素。

python 复制代码
# 处理 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 框架组织和执行接口测试用例,并生成测试报告。

python 复制代码
import unittest
from HTMLTestRunner import HTMLTestRunner
import requests
 
class 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 文件的操作函数,以便更高效地读取和写入测试数据。

python 复制代码
'''
在接口自动化测试中,经常需要与 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、请求头等常量封装到一个单独的模块中。

python 复制代码
'''
将常量(如 API 的 URL、请求头、认证信息等)进行封装有诸多好处。可以将这些常量集中定义在一个模块中,方便管理和修改。
'''
​
#创建一个 constants.py 文件
API_URL = 'https://www.example.com/api'
REQUEST_HEADERS = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_token'
}

3.3 封装获取接口数据

为了在多个测试用例中重复使用获取接口数据的逻辑,可以将其封装为一个函数。

python 复制代码
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 请求的基类进行封装,以便简化测试用例的编写。

python 复制代码
class BaseRequest:
    def __init__(self, base_url):
        self.base_url = base_url
 
    def get(self, url, params=None, headers=None):
        response = requests.get(f'{self.base_url}{url}', params=params, headers=headers)
        return response
 
    def 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 语句捕获异常,并记录错误信息。

python 复制代码
'''
接口自动化测试的主流程通常包括发送请求、获取响应、验证结果等步骤。可以将这个主流程封装为一个函数,并在其中处理可能出现的错误。
'''
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 获取接口返回状态

解释如何获取接口返回的状态信息,如状态码、响应头等。

python 复制代码
response = requests.get('https://www.example.com/api')
status_code = response.status_code
response_headers = response.headers

3.7 通过预期结果判断 case 是否执行

介绍根据预期结果来决定测试用例是否执行的方法,如使用断言来判断实际结果是否与预期结果一致,从而决定测试用例是否通过。

python 复制代码
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 中

python 复制代码
展示如何将测试的预测结果写入到 Excel 文件中,以便后续分析和统计。

from openpyxl import Workbook
​
def write_prediction_to_excel(result, file_path, sheet_name):
    wb = Workbook()
    sheet = wb.active
    sheet.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 查找对应的测试数据。

python 复制代码
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 row
    return None

3.10 数据依赖问题之根据规则提取响应数据

说明根据特定规则从响应数据中提取所需信息的方法,如使用正则表达式或 JSON 解析来提取数据。

python 复制代码
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 库发送邮件

python 复制代码
import smtplib
from email.mime.text import MIMEText
​
def send_email(subject, body, recipient):
    sender = '[email protected]'
    password = 'your_password'
​
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = sender
    msg['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 结果统计并发送报告

结果统计及自动整理发送报告代码

python 复制代码
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, '[email protected]')

先整理一下,fiddler抓包工具与requests库构建自动化报告笔记,后续继续整理更新fiddler具体操作 和JMeter ,postman , Appium 以及unittest框架的各自笔记

整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!

相关推荐
__lost1 分钟前
Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
python·opencv·计算机视觉
海绵波波1076 分钟前
玉米产量遥感估产系统的开发实践(持续迭代与更新)
python·flask
漫谈网络19 分钟前
基于 Netmiko 的网络设备自动化操作
运维·自动化·netdevops·netmiko
帅云毅35 分钟前
Web3.0的认知补充(去中心化)
笔记·学习·web3·去中心化·区块链
豆豆35 分钟前
day32 学习笔记
图像处理·笔记·opencv·学习·计算机视觉
逢生博客44 分钟前
使用 Python 项目管理工具 uv 快速创建 MCP 服务(Cherry Studio、Trae 添加 MCP 服务)
python·sqlite·uv·deepseek·trae·cherry studio·mcp服务
堕落似梦1 小时前
Pydantic增强SQLALchemy序列化(FastAPI直接输出SQLALchemy查询集)
python
nenchoumi31191 小时前
VLA 论文精读(十六)FP3: A 3D Foundation Policy for Robotic Manipulation
论文阅读·人工智能·笔记·学习·vln
凉、介1 小时前
PCI 总线学习笔记(五)
android·linux·笔记·学习·pcie·pci
坐吃山猪2 小时前
Python-Agent调用多个Server-FastAPI版本
开发语言·python·fastapi