pytest--python的一种测试框架--request请求加入headers

Cookie与Session的区别以及在requests请求中添加headers的重要性,

一、request headers中的cookie和session机制的作用与区别

Cookie 和 Session 是两种在客户端和服务器之间保持状态的技术。HTTP 协议本身是无状态的,这意味着服务器无法从上一次的请求中保留任何信息到下一次请求。Cookie 和 Session 机制就是为了解决这个问题。

Cookie:

1、Cookie 是服务器发送到用户浏览器并保存在浏览器上的一块信息,后续请求浏览器会自动带上这个 Cookie 信息,通过这种方式可以实现保持用户的状态。
2、Cookie 数据始终在同源的 http 请求中携带(即使不需要),即使保存在浏览器也会过期,不过过期时间可以自定义。
3、Cookie 数据还有路径(path)的概念,可以限制 Cookie 只属于某个路径下。
4、Cookie 的大小有限制,一般不超过 4KB。

Session:

1、Session 是另一种记录客户状态的机制,不同的是 Session 是保存在服务器端的。用户浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器上。这就可以提供跨请求的状态维护。
当浏览器请求服务器,如果需要记录业务信息(比如用户的登录状态),服务器会在响应头中写入一个 Session ID,浏览器在下次请求时会带上这个 Session ID,服务器通过这个 Session ID 就能找到这个用户的会话信息。
2、Session 的存储方式可以有多种,常见的有:内存、数据库、Redis 等。
3、Session 的存储容量基本上是没有限制的,取决于你的存储方式。

区别:

1、Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上。
2、Cookie 不是很安全,别人可以分析存放在本地的 Cookie 并进行 Cookie 欺骗,考虑到安全应当使用 Session。
3、S

<think>好的,我现在需要帮用户找一个基于Python的接口自动化测试框架示例,使用requests、pytest和Allure,并且要支持数据驱动。用户提供的引用资料里有几个相关的项目结构,我得先仔细分析这些引用内容,然后结合自己的知识来整理出一个合适的示例。 首先看用户给的四个引用。引用1提到了Python接口自动化测试框架的组成部分,包括requests、YAML、Pytest、Allure等,但具体结构可能在其他引用中更详细。引用2详细描述了项目结构,比如api层、common工具类、核心请求封装、配置文件、测试数据管理等。引用3的结构示例里有api_keyword层存放关键字驱动类,test_cases作为测试用例,VAR存放常量,还有conftest.py和main.py。引用4则提到从特定模块导入ApiCase,可能涉及测试用例的组织。 数据驱动的核心在于将测试数据与测试逻辑分离,通常使用外部文件如YAML、JSON或Excel来存储数据,然后在测试用例中读取这些数据驱动测试。结合pytest的参数化功能,比如@pytest.mark.parametrize,可以方便地实现这一点。而Allure用于生成美观的测试报告,需要在测试中添加相应的注解,如@allure.feature、@allure.story等。 接下来,我需要设计一个示例框架的结构,可能包括以下部分: 1. 测试数据管理:通常在data目录下存放YAML或JSON文件,每个文件对应一个测试场景的数据。 2. 请求封装:在api目录下封装具体的接口请求,使用requests库发送HTTP请求。 3. 测试用例:在testcases目录下编写pytest测试用例,使用参数化读取测试数据。 4. 工具类:common目录可能包含读取YAML、处理请求等的工具函数。 5. 配置文件:config目录存放环境配置,如不同环境的URL。 6. Allure报告生成:配置pytest的运行参数,生成Allure报告,并在测试用例中添加必要的描述信息。 现在,我需要确保每个部分都有代码示例,并且结构清晰。例如,测试数据用YAML文件存储,每个用例有多个测试参数。然后,在测试用例中通过pytest的参数化装饰器读取这些数据,并驱动测试执行。同时,使用Allure的装饰器来增强报告的可读性。 可能需要注意的地方包括: - 如何正确读取YAML文件并转换为pytest可用的参数。 - 请求封装层的异常处理,比如网络错误或响应状态码非200的情况。 - 在Allure报告中展示详细的请求和响应信息,方便调试。 - 数据驱动与关键字驱动的结合,比如引用3中的api_key.py可能将接口调用封装成关键字,供测试用例使用。 然后,我需要检查是否有遗漏的部分,比如conftest.py中的全局fixture,或者如何处理测试依赖和前置条件。此外,还要确保示例代码的LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能涉及数学公式较少,主要关注代码结构。 最后,生成相关问题,确保问题与接口自动化测试框架相关,如数据驱动的实现方式、如何集成Allure报告、处理测试依赖的方法等。</think>以下是一个基于Python的接口自动化测试数据驱动框架示例,整合了requests、pytest和Allure,项目结构及核心实现如下: --- ### 项目结构 ``` project/ ├── config/ # 配置文件 │ └── env.yaml # 环境配置 ├── data/ # 测试数据驱动文件 │ └── test_login.yaml # YAML格式测试数据 ├── api/ # 接口封装层 │ └── http_client.py # requests二次封装 ├── testcases/ # 测试用例层 │ └── test_login.py # pytest测试脚本 └── conftest.py # pytest全局夹具配置 ``` --- ### 核心代码实现 #### 1. 数据驱动文件示例(YAML格式) ```yaml # data/test_login.yaml - case_name: "登录成功场景" url: "/api/login" method: "POST" headers: {"Content-Type": "application/json"} data: username: "admin" password: "123456" expected: code: 200 message: "success" - case_name: "密码错误场景" url: "/api/login" method: "POST" headers: {"Content-Type": "application/json"} data: username: "admin" password: "wrong_pwd" expected: code: 401 message: "invalid password" ``` #### 2. 接口请求封装 ```python # api/http_client.py import requests from allure import step class HttpClient: def __init__(self, base_url): self.session = requests.Session() self.base_url = base_url @step("发送{method}请求到{url}") def send_request(self, method, url, **kwargs): full_url = f"{self.base_url}{url}" response = self.session.request(method.upper(), full_url, **kwargs) return response.json(), response.status_code ``` #### 3. pytest测试用例 ```python # testcases/test_login.py import pytest import yaml import allure from api.http_client import HttpClient @allure.feature("用户登录模块") class TestLogin: with open("data/test_login.yaml") as f: test_data = yaml.safe_load(f) @pytest.fixture(autouse=True) def setup(self): self.client = HttpClient("https://api.example.com") @pytest.mark.parametrize("case_data", test_data) @allure.title("{case_data[case_name]}") def test_login(self, case_data): # 执行接口请求 response, status_code = self.client.send_request( method=case_data["method"], url=case_data["url"], headers=case_data["headers"], json=case_data["data"] ) # 断言验证 assert status_code == case_data["expected"]["code"] assert response["message"] == case_data["expected"]["message"] ``` #### 4. Allure报告生成命令 ```bash pytest testcases/ -v --alluredir=./report_allure allure serve ./report_allure ``` --- ### 框架特点说明 1. **数据驱动**:通过YAML文件分离测试数据与代码,支持多场景参数化测试[^3] 2. **请求封装**:使用requests的Session对象保持会话状态,统一添加日志和异常处理[^2] 3. **报告可视化**:Allure自动捕获断言结果和@step注解的操作步骤,生成交互式测试报告[^4] 4. **夹具管理**:通过conftest.py实现全局前置操作(如初始化数据库连接)[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淅淅同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值