pytest框架之mark标记功能详细介绍

本文详细介绍了pytest框架的mark功能,用于给测试用例打标签,便于管理和选择性运行。通过创建pytest.ini文件注册标签,并通过命令行或代码执行指定标签的测试。还讲解了skip跳过标记的使用,包括直接跳过和条件跳过。文章最后提到了项目实战资源和相关资料。

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

文章末尾给大家留了大量福利

一、mark标记

在实际工作中,我们要写的自动化用例会比较多,也不会都放在一个py文件中,如果有几十个py文件,上百个方法,而我们只想运行当中部分的用例时怎么办?

​ pytest提供了一个非常好用的mark功能,可以给测试用例打上各种各样的标签,运行用例时可以指定运行某个标签。mark功能作用就是灵活的管理和运行测试用例。

 

​ 标签既可以打到方法上,也可以打到类上,标记的两种方式:

  • 直接标记类或方法或函数:@pytest.mark.标签名
  • 类属性:pytestmark = [pytest.mark.标签名, pytest.mark.标签名],需要注意的是属性名称是固定的
import pytest


@pytest.mark.beta	# 可以给类打标签
class TestLogin:	# 标记类

    @pytest.mark.qc
    @pytest.mark.beta	# 也可以多个标签
    def test_login(self):	# 标记方法
        pass

@pytest.mark.smoke		# 单个标签
def test_register():	# 标记函数
        pass

class TestClass:
    # 加一个 pytestmark的类属性
    pytestmark = [pytest.mark.qc, pytest.mark.beta]	# 标签存放在一个列表

py
### pytest框架中的Mark用法 pytest提供了一种灵活的方式通过`mark`来标记测试函数,这使得可以对特定条件下的测试执行不同的操作。例如,在某些情况下可能只想运行带有特定标签的测试,或者跳过一些不适合当前环境配置的测试。 #### 基本语法 要给一个测试加上标志,可以在其定义前使用装饰器形式的应用程序接口(API)。最常用的内置marks包括`skip`, `skipif`, 和 `xfail`. 下面是一个简单的例子展示如何应用这些: ```python import pytest @pytest.mark.skip(reason="no way of currently testing this") def test_the_unknown(): pass ``` 对于更复杂的场景,比如基于条件决定是否应该跳过某个测试,则可利用`skipif`: ```python import sys import pytest @pytest.mark.skipif(sys.version_info < (3, 7), reason="requires python3.7 or higher") def test_functionality_only_on_python_37_and_above(): assert True ``` 当预期失败但仍希望记录下来以便后续审查时,`xfail`非常有用: ```python import pytest @pytest.mark.xfail(strict=True) def test_feature_that_is_broken(): # This will be marked as expected to fail. raise ValueError("This is a known issue.") ``` 除了上述预设外,还可以创建自定义的marks用于分类目的或其他用途: ```python import pytest @pytest.mark.webtest def test_example_website_response(): response = requests.get('http://example.com') assert response.status_code == 200 ``` 为了确保所有使用的非标准marks都被注册到pytest环境中,可以在项目的根目录下创建名为`conftest.py`文件,并在里面声明它们: ```python # content of conftest.py import pytest def pytest_configure(config): config.addinivalue_line( "markers", "webtest: mark tests that require web access." ) ``` 这样做的好处是可以让其他开发者清楚哪些是特殊的测试类别,并且有助于防止拼写错误造成的误解。 最后值得注意的是,可以通过命令行参数指定只运行具有某种特性的测试案例。例如,如果想要仅限于那些被标记为`webtest`的测试,那么就可以这样做: ```bash pytest -v -m webtest ``` 此命令会告诉pytest只挑选含有`@pytest.mark.webtest`修饰符的方法来进行验证[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值