pytest框架-自定义标记mark

本文介绍了pytest框架如何使用自定义标记`mark`来划分和执行测试用例。通过 `-v` 参数指定函数节点ID运行特定用例,使用 `-k` 选项匹配用例名称,支持排除、选择多个用例的运行。例如,使用 `-m` 标记筛选执行特定模块的用例,通过 `-k` 指定不包含某个名称的用例,或者同时运行多个匹配的用例。

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

目录

mark标记

-v 指定的函数节点id

运行class中test_05用例

 运行整个class

运行test_01用例和整个class

 -k 匹配用例名称

使用-k命令行选项指定在匹配用例名称的表达式

运行所有的测试,根据用例名称排除掉某些用例

同时选择匹配两个用例

同时匹配三个用例


pytest框架支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行。一个大项目自动化用例时,可以划分多个模块,也可以使用标记功能,标明哪些是模块1用例,哪些是模块2的,运行代码时候指定mark名称运行就可以;

mark标记

新建test_1.py文件:

import pytest
@pytest.mark.webtest
def test_01():
    print("11111")
    pass
def test_02():
    print("222222")
    pass
def test_03():
    print("33333")
    pass
def test_04():
    print("444444")

@pytest.mark.webtest
class Test:
    def test_05(self):
        print("55555")
        pass
    def test_06(self):
        print("666666")
        pass
    def test_07(self):
        print("77777")
        pass
if __name__ == "__main__":
    pytest.main(["-s", "test_1.py", "-m=webtest"]) #-m=webtest表示至运行webtest标记的测试

新建pytest.ini文件:

[pytest]
markers=
    webtest:mark a test as a webtest.
    slow:mark test as slow.
    T2:mark test as slow.

运行结果:

cmd环境下输入命令:pytest -v -m webtest

 如果不想执行webtest标记的用例,就把“-m=webtest”改为“-m=not webtest”

 

 运行结果:

### 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、付费专栏及课程。

余额充值