13-pytest-自定义mark标记

本文介绍了如何在自动化测试中利用pytest的mark功能来标记和选择性执行测试用例。通过示例代码展示了如何为测试类和方法添加自定义标记,并在运行时通过命令行参数筛选要执行的标记。

目录

前言

代码示例


前言

  • 自动化测试中,经常有这个这样的需求,执行某个模块或特定部分用例,这时候可以使用pytest中的mark自定义标记功能,去执行被标记的所有用例

代码示例

# -*- coding: utf-8 -*-
# @Time    : 2021/10/16
# @Author  : 大海
# @File    : test_26.py
import os

import pytest


@pytest.mark.homepage
class TestHomePage(object):

    @pytest.mark.test1
    def test_one(self):
        print('这是case1')

    @pytest.mark.test2
    def test_two(self):
        print('这是case2')

    def test_another(self):
        print('这是其他case')


@pytest.mark.myapage
class TestMyPage(object):

    @pytest.mark.test3
    def test_three(self):
        print('这是case3')

    @pytest.mark.test4
    def test_four(self):
        print('这是case4')


if __name__ == "__main__":
    # 执行时使用-m参数 后面是想要执行的自定义的标记
    os.system('pytest -s -m homepage')

<think>好的,我现在需要回答用户的问题:如何在pytest中定义和使用自定义mark装饰器。首先,我得回顾一下自己对pytestmark装饰器的了解。记得pytestmark机制允许用户通过装饰器给测试函数或类添加标记,然后可以根据这些标记来选择运行特定的测试用例。用户提到的自定义mark装饰器,应该就是用户自己定义的标记,比如@pytest.mark.smoke这样的。 首先,定义自定义mark需要注册,否则pytest会发出警告。根据pytest的文档,用户需要在pytest.ini文件中注册自定义mark,以避免出现未知标记的警告。比如: [pytest] markers = smoke: 标记为冒烟测试 performance: 性能测试用例 这样注册之后,用户就可以在测试用例中使用@pytest.mark.smoke来标记测试函数了。 接下来,用户可能需要知道如何应用这个装饰器。例如,在测试函数上添加装饰器: import pytest @pytest.mark.smoke def test_login(): assert True 然后,运行时可以通过-m选项选择运行特定标记的测试,比如pytest -m smoke。 另外,用户可能还会问如何查看已注册的mark。可以使用pytest --markers命令,这会列出所有已注册的标记及其描述。 需要注意的是,如果未注册直接使用自定义markpytest会报warning。所以强调注册的重要性。此外,使用自定义mark时,应确保pytest.ini文件的位置正确,通常放在项目根目录下。 可能还需要提到在conftest.py中注册mark的方式,但通常推荐使用pytest.ini,因为这样更清晰。另外,可以给出一个完整的例子,展示定义、注册和使用的整个流程。 另外,结合用户提供的引用,特别是引用[2]和引用[3],用户可能对fixture和mark的搭配使用有疑问,比如如何将自定义mark与fixture结合。不过当前问题集中在自定义mark的定义和使用,可能需要保持回答的针对性。 总结步骤应该是:注册mark、应用装饰器、运行命令、查看已注册的mark。同时给出示例代码和注意事项,比如避免未注册的mark,以及如何处理多个mark的情况。</think>在 pytest 中定义和使用自定义 mark 装饰器需要以下步骤,通过注册标记和装饰器应用实现测试用例分类管理: ### 一、定义自定义 mark 装饰器 1. **注册标记** 在项目根目录创建或修改 `pytest.ini` 文件,声明自定义标记及其说明: ```ini [pytest] markers = smoke: 标记冒烟测试用例 performance: 标记性能测试用例 regression: 标记回归测试用例 ``` 该操作可避免 pytest 发出 `Unknown pytest.mark` 警告[^2]。 2. **应用装饰器** 在测试函数/类上通过 `@pytest.mark.标记名` 添加标记: ```python import pytest @pytest.mark.smoke def test_login(): assert True @pytest.mark.performance class TestAPI: def test_response_time(self): assert response_time < 500 ``` ### 二、使用自定义 mark 装饰器 1. **运行指定标记的测试** 通过 `-m` 参数筛选测试用例: ```bash pytest -m smoke # 仅运行冒烟测试 pytest -m "not smoke" # 排除冒烟测试 ``` 2. **查看已注册标记** 执行以下命令显示所有已注册标记及描述: ```bash pytest --markers ``` ### 三、完整示例 **目录结构** ``` project_root/ ├── pytest.ini └── tests/ └── test_example.py ``` **test_example.py 内容** ```python import pytest @pytest.mark.regression def test_data_validation(): assert 1 + 1 == 2 @pytest.mark.smoke @pytest.mark.performance # 多标记组合使用 def test_api_healthcheck(): assert check_api_status() is True ``` ### 四、注意事项 1. **标记冲突处理** 使用逻辑运算符组合标记时需注意优先级,例如 `-m "smoke and performance"` 表示同时具备两个标记的用例才会运行[^3]。 2. **标记与 Fixture 结合** 可通过 `request` fixture 获取当前测试的标记信息,实现动态配置: ```python @pytest.fixture def setup(request): if 'performance' in request.keywords: enable_metrics_collection() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱学习de测试小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值