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

一、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] # 标签存放在一个列表


pytest.main()

二、注册标签名

​ 我们要想运行已经打好标记的函数,还需要对标签名进行注册,告诉pytest有哪些标签,如果不进行注册运行时(pytest的高级版本)可能会报警告让你进行注册。

​ 我们只需要在项目根目录下创建一个pytest.ini文件,注意文件名是不可修改的,否则pytest会找不到。内容格式如下:


# pytest.ini

# 只能修改=右边的值

[pytest]

python_files = demo_*.py # 模块名以demo_开头

python_functions = demo_* # 方法名以demo_开头

python_classes = Demo* # 类名名以Demo开头


# 注册标签

markers =

qc

beta

smoke

三、运行指定的标签

通过命令行执行

​ 单个标签:pytest -m "标签名" (-m意思是执行标签mark),不想执行某个标签可以用not来取反,即pytest -m "not 标签名"

​ 多个标签:可以加上判断,pytest -m "qc and beta" 或者 pytest -m "qc or beta" 效果是一样的

​ 注意:标签名一定要加双引号,单引号是会报错的。

四、通过代码执行

​ 这里普及一下,main()方法是可以接收不定长参数的,因此可以把要执行的命令放在一个列表中


if __name__ == '__main__':

pytest.main(['-m qc and beta', '-s']) # 标签名不需要加引号

​ 关于pytest的指令,可以通过控制台执行pytest --help查看,上面举例中-s命令是指打印更加详细的信息,如果程序运行过程当中的print()信息打印不出来,可以加上-s可选参数,它是-- capture=no的缩写。

五、skip跳过标记

​ 在维护测试用例的过程中,可能在一个阶段某些用例已经不需要了,或者在指定条件下是不需要运行的,那么我们就可以通过mark.skip跳过这些函数或者类,两种跳过方式:

  • 直接跳过: @pytest.mark.skip(reason = “原因”),这里原因是可选参数
  • 条件跳过,即满足某个条件才跳过:@pytest.mark.skipif(a == 1, reason = “原因”)

db_host = 'localhost'


@pytest.mark.skip("和现在的需求不符合") # 不满足当下了,或别人编写的暂时不能删的

def test_yuz(self):

pass


@pytest.mark.skipif(db_host == 'localhost', reason='只测试线上环境,不测试本地环境')

def test_develop_env(self):

pass

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

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

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pytest 是一个Python测试框架,它允许你编写和重复运行测试,以验证代码的正确性。它还允许你利用特性和可重复使用的代码,以更快的速度完成测试。它是一个功能强大的框架,可以轻松地测试应用程序和函数,并且可以与其他测试框架集成。 ### 回答2: pytest是一个用于编写和执行Python单元测试的开源测试框架。它是Python标准库unittest的替代方案,提供了更简单、更易于使用的语法和功能pytest的特点之一是它的灵活性和可扩展性。它支持自动发现测试用例,可以通过自动检测命名规则或使用特定标记来发现测试用例。无需编写繁琐的测试套件,只需要添加测试函数或方法,pytest会自动识别并执行。 pytest提供了丰富的断言方法用于验证测试结果,比如assert等。与其他测试框架相比,pytest的断言方式更简洁直观,易于使用和理解。 与其他测试框架相比,pytest还提供了强大的插件系统。通过安装不同的插件,可以扩展pytest功能,例如生成测试报告、集成其他测试工具等。它可以与持续集成工具(如Jenkins)和代码覆盖工具(如Coverage.py)无缝集成,方便测试结果和覆盖率的监控和分析。 另外,pytest还提供了丰富的测试运行和配置选项。测试运行时,可以选择执行全部测试用例或指定部分用例,可以设置并行执行测试,可以按模块、类、函数等级别输出测试结果。测试配置方面,可以通过配置文件或命令行参数进行灵活配置,满足不同测试场景的需求。 总的来说,pytest是一个功能强大、易用性高、可扩展性强的Python测试框架。通过使用pytest,可以更快速、高效地编写、运行和管理Python单元测试,提高测试效率和质量。 ### 回答3: pytest是一个基于Python语言编写的测试框架,被广泛应用于软件开发中的单元测试、集成测试和功能测试等方面。它具有简单易用、灵活高效的特点,是Python开发者首选的测试框架之一。 pytest的主要特性如下: 1. 标志参数:pytest可以通过标志参数的方式对测试进行过滤和选择,例如可以使用"-k"参数按关键字选择测试用例。 2. 自动发现:pytest会自动在指定的测试路径中发现以"test_"或"_test"开头的测试文件和以"test_"开头的测试函数,无需手动编写测试套件。 3. 参数化测试:pytest支持使用装饰器@pytest.mark.parametrize对测试用例进行参数化,可以方便地测试不同的输入和预期输出组合。 4. 丰富的断言:pytest提供了许多丰富的断言方法,可以方便地进行测试结果的验证,如assert等。 5. 插件扩展:pytest支持丰富的插件机制,可以通过插件扩展框架功能,例如pytest-xdist可以实现多进程或多线程的测试并行执行。 6. 丰富的输出:pytest提供了易读易理解的测试结果输出,包括测试用例执行情况、错误信息、失败原因等,便于开发者进行问题定位和修复。 7. 支持模块级别和函数级别的fixture:pytest允许在测试用例中定义fixture,用于提供测试用例执行所需的前置条件或共享的资源,可以实现灵活的测试环境控制。 总之,pytest是一个功能强大、易用灵活的测试框架,可以帮助开发者编写高效、可靠的测试用例,并提供丰富的功能和插件扩展机制,为软件质量保证提供了很好的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值