接口自动化框架之python pytest-mark(三)

本文详细介绍了如何使用Python的Pytest库中的mark功能进行接口自动化测试,包括mark标签的介绍、测试分类、参数化、执行顺序设置、用例跳过和超时时间标记等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、mark标签介绍

在测试用例/测试类前面加上:@pytest.mark.标签名,打标记范围:测试用例、测试类、模块文件


二、使用mark进行分类

在使用mark标签之前要创建pytest.ini配置文件,同样在运行的时候,‘-m’参数后边也要标识分类标签的名称

1.创建测试代码

import pytest


def test_01():
    print('oi')

@pytest.mark.number_01
def test_02():
    print('iu')

def test_03():
    print('iuu')

2.配置文件:(注意:一定是pytest.ini)

[pytest]

markers=
    number_01: 分类1
    number_02: 分类2
    number_03: 分类3

3.执行:

if __name__ == '__main__':
    pytest.main(['-s','-v','-m','number_01','test_mark.py'])

完整代码:

import pytest


def test_01():
    print('oi')

@pytest.mark.number_01
<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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值