【pytest系列】- mark标记功能详细介绍

mark标记

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

​ 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会找不到。内容格式以下:code

# 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 标签名"blog

​ 多个标签:能够加上判断,pytest -m "qc and beta" 或者 pytest -m "qc or beta" 效果是同样的ip

注意:标签名必定要加双引号,单引号是会报错的。自动化

经过代码执行

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

if __name__ == '__main__':
    pytest.main(['-m qc and beta', '-s'])	# 标签名不须要加引号

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

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
相关文章
相关标签/搜索