Files
InterfaceAutoTest/core/session.py
CNWei 6393414ab2 feat,fix(core,docs): 完善核心模块代码注释并添加架构改进文档
- 为 core 目录下主要模块 (models, context, creator, base_api, exchange, executor) 添加了详细的类和方法 Docstring。
   - 新增 docs/架构改进.md 文件。
2026-03-18 11:26:55 +08:00

101 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# coding=utf-8
"""
@author: chen wei
@Software: PyCharm
@contact: t6i888@163.com
@file: session.py
@date: 2024/9/12 21:56
@desc:
"""
import logging
from urllib.parse import urljoin
import requests
from requests import Response, PreparedRequest
import allure
# logger = logging.getLogger("requests.session")
logger = logging.getLogger(__name__)
# logging.basicConfig(level=logging.INFO)
class Session(requests.Session):
"""
自定义会话管理类,继承自 requests.Session。
增强功能:
1. Base URL 管理:支持相对路径自动拼接。
2. Allure 集成:自动将请求操作包装为 Allure 步骤。
3. 日志记录:详细记录请求和响应的 头部、正文、状态码等信息。
"""
def __init__(self, base_url=None):
"""
初始化会话。
Args:
base_url: 基础 URL用于拼接相对路径请求。
"""
super().__init__() # 先执行父类的初始化
self.base_url = base_url # 在执行子类的初始化操作
@allure.step("发送请求")
def request(self, method, url: str, *args, **kwargs) -> Response:
"""
发送 HTTP 请求(重写)。
逻辑:
1. 如果 url 是相对路径,自动拼接 base_url。
2. 记录 Allure 步骤。
Args:
method: 请求方法 (GET, POST, etc.)
url: 请求 URL (支持相对路径)
*args: 透传给 requests.Session.request 的位置参数
**kwargs: 透传给 requests.Session.request 的关键字参数
Returns:
Response: 响应对象
"""
if not url.startswith("http"):
# 自动添加baseurl
url = urljoin(self.base_url, url)
return super().request(method, url, *args, **kwargs) # 按照原有方式执行
def send(self, request: PreparedRequest, *args, **kwargs) -> Response:
"""
发送底层 PreparedRequest重写
逻辑:
1. 记录请求详细日志 (URL, Headers, Body)。
2. 执行真实网络请求。
3. 记录响应详细日志 (Status, Headers, Body)。
Args:
request: 已准备好的请求对象
*args: 透传参数
**kwargs: 透传参数
Returns:
Response: 响应对象
"""
logger.info(f"发送请求>>>>>> 接口地址 = {request.method} {request.url}")
logger.info(f"发送请求>>>>>> 请求头 = {request.headers}")
logger.info(f"发送请求>>>>>> 请求正文 = {request.body} ")
resp = super().send(request, **kwargs) # 按照原有方式发送请求
logger.info(f"接收响应 <<<<<< 状态码 = {resp.status_code}")
logger.info(f"接收响应 <<<<<< 响应头 = {resp.headers}")
logger.info(f"接收响应 <<<<<< 响应正文 = {resp.text}")
# logger.info(f"接收响应 <<<<<< 响应正文 = {resp.json()}")
return resp
if __name__ == '__main__':
...