Pytest的用例标记和测试执行

pytest 用例标记和测试执行
hello呀,铁铁们,上一篇文章入门篇咱们介绍了 pytest 的前后置方法和 fixture 机制,今天九九主要给大家介绍 pytest 中的标记机制和用例执行的方法。pytest 可以通过标记将数据传入于测试函数中,也可以通过标记中对执行的用例做筛选,接下来直接进入正题。

一、pytest 中内置的标记
pytest 标记使用需要通过 pytest.mark.标记 来使用,pytest 中为应对各种测试场景也内置了很多的标记。

1.1、pytest.mark.parametrize:用例参数化的标记
通过 parametrize 可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例。

Demo:


@pytest.mark.parametrize('item',[11,22,33,44,55,66])

def test_demo(item)

assert item > 50

1.2、pytest.mark.skip:跳过用例执行

通过 skip 装饰的用例,在执行的时候会无条件跳过,

参数 reason:跳过测试函数的原因。

Demo


# 不写跳过原因

@pytest.mark.skip

def test_demo()

assert item > 50


# 写跳过原因

@pytest.mark.skip(reason='不需要执行')

def test_demo()

assert item > 50

1.3、pytest.mark.skipif:根据条件跳过用例

skipif 可以根据条件来决定是否跳过用例的执行, 如果条件为 True 则跳过测试函数执行。

参数 :condition —跳过的条件

参数 : reason —跳过的原因

Demo


a = 10

@pytest.mark.skipif(a > 20,reason='条件不成立,不执行')

def test_demo()

assert item > 50

1.4、pytest.mark.xfail:标记预期失败的用例
xfail 可以将测试函数标记为预期执行失败的用例。

参数 :condition — 将测试函数标记为 xfail 的条件(True/False )

参数 : reason — 测试函数被标记为 xfail 的原因

参数 : raises — 预期失败的异常类型

参数 : run — 是否应该实际执行测试函数。如果 False,该函数将始终 xfail 并且不会被执行 。

参数 : strict — 严格模式(True/False )

Demo


a = 10

@pytest.mark.xfail(a > 20,reason='条件不成立,不执行' raises=AssertionError )

def test_demo()

assert item > 50

1.5、pytest.mark.usefixtures:给测试类或模块设置测试夹具

usefixtures 标记一般用于给测试类下面的测试方法统一设置测试夹具。

Demo


# TestDome这个测试类的所有测试用例均执行my_fixture这个夹具

@pytest.mark.usefixtures('my_fixture这个夹具')

class TestDome:

# 函数用例 指定测试夹具

def test_02(self):

print('----测试用例:test_01------')


# 函数用例 指定测试夹具

def test_03(self):

print('----测试用例:test_02------')

二、自定义标记

pytest 支持通过 pytest.ini 文件注册自定义的标记。以满足执行用例时,通过标记对用例进行筛选。,

2.1、注册标记

pytest.ini 文件注册标记的语法如下:


[pytest]


markers =

标记1

标记2

 2.2、标记函数

Demo:


# 用例前面加载标签:@pytest.mark.标签名

@pytest.mark.main

def test_demo():

pass

 2.3、标记类

Demo:


# 方式一:直接类上面打标记

@pytest.mark.main

class TestClass(object):

def test_demo1(self):

assert 10 > 20


# 方式二:通过类属性pytestmark,可以同时添加多个标记

class TestClass(object):

pytestmark = [pytest.mark.main, pytest.mark.main]


def test_demo1(self):

assert 10 > 20

 三、通过标记筛选用例执行

Demo:现有用例如下:


import pytest


@pytest.mark.yuze

@pytest.mark.musen

def test_01():

print("用例一")


def test_02():

print("用例二")


@pytest.mark.musen

def test_03():

print("用例三")


@pytest.mark.musen

def test_04():

print("用例四")


@pytest.mark.yuze

def test_05():

print("用例五")


@pytest.mark.yuze

def test_06():

print("用例六")

'

运行

运行

上面 Demo 中有 6 条测试用例,分别通过 pytest.mark.yuze 和 pytest.mark.musen 进行标记了,接下来我们一起来看看如何通过标记选择用例执行。

3.1、通过单个标记筛选

语法:pytest -m '标签名'
Demo: pytest -m musen

执行结果如下:


========================== test session starts ==========================

platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0

rootdir: C:\project\, inifile: pytest.ini

plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2

collected 6 items / 3 deselected / 3 selected

test_mode.py ... [100%]

========================== 3 passed, 3 deselected in 0.29s ==========================

可以看到执行结果执行了 3 条用例,3 条未选中。

3.2、同时选中多个标记

语法:pytest -m "标记 1 or 标记 2"

命令: pytest -m "musen ro yuze"

执行通过 musen 或者 yuze 标记的的用例。执行结果如下:


========================== test session starts ==========================

platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0

rootdir: C:\project\, inifile: pytest.ini

plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2

collected 6 items / 1 deselected / 5 selected

test_mode.py ..... [100%]

========================== 5 passed, 1 deselected in 0.29s ==========================

 从上述结果可以看到,只要加了 musen 或 yuze 这两个标记中的任意一个

语法: pytest -m "标记 1 and 标记 2"

命令: pytest -m "musen and yuze"

执行通过 musen 和 yuze 这两个标记同时标记的用例。执行结果如下


========================== test session starts ==========================

platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0

rootdir: C:\project\, inifile: pytest.ini

plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2

collected 6 items / 5 deselected / 1 selected

test_mode.py . [100%]

========================== 1 passed, 5 deselected in 0.29s ==========================

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest用例管理框架的作用是帮助开发人员更有效地组织和管理测试用例,以提高测试的可维护性和可扩展性。以下是pytest用例管理框架的几个主要作用: 1. 自动发现和收集用例pytest能够自动发现和收集测试用例,无需手动编写繁琐的配置文件或指定测试用例的路径,减少了测试用例管理的工作量。 2. 灵活的目录结构:pytest支持灵活的目录结构,可以根据项目的需求进行组织和划分测试用例,使得用例的管理更加清晰和规范。 3. 参数化测试pytest支持参数化测试,可以通过装饰器的方式为同一个测试用例传入不同的参数进行多次执行,避免了重复编写相似测试用例的问题,提高了用例的复用性。 4. 用例标记和过滤:pytest支持给测试用例添加标记marker),可以按照标记用例进行过滤和选择执行,方便对不同类型的用例进行灵活管理。 5. 用例分组和顺序执行pytest支持对测试用例进行分组和顺序执行,可以根据需要将用例划分为不同的组,按照指定的顺序执行,确保执行结果的一致性。 6. 用例扩展和定制:pytest提供了丰富的插件和钩子机制,可以根据项目需求进行用例扩展和定制,例如添加自定义的fixture、自定义测试报告等,提高了用例管理的灵活性和可定制性。 通过使用pytest用例管理框架,开发人员可以更好地组织和管理测试用例,提高测试用例的可读性、可维护性和可扩展性,从而更加高效地进行软件测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值