01

引言

上一篇总结了pytest的失败重试机制,这篇pytest的mark功能,mark翻译成中文译为《标记,做标记》,简单理解就是在用例上打一个标记,运行时,可以只运行打过标记的case。

pytest提供了标记机制,允许你使用masker对测试函数(测试用例)做标记,一个测试用例可以用多个marker。针对冒烟测试测试,我们可以使用marker标记,检查系统有无重大缺陷。因为冒烟测试通常是主流程的测试,不会包含全套测试的。

02

用法

# 可以标记类,也可以标记测试函数(用例),也可以标记测试模块
pytest.mark.{marker_name}




在测试类里,使用以下申明(测试类下,所有用例都被打上该标签)
class TestDemo:
    # 单个标签
    pytestmark = pytest.mark.已注册标签名
    # 多个标签
    pytestmark = [pytest.mark.标签1, pytest.mark.标签1]
在模块文件里(py文件下,所有测试函数和测试类里面的测试函数,都有会打上该标签)


import pytest
# 单个标签
pytestmark = pytest.mark.已注册标签名
# 多个标签
pytestmark = [pytest.mark.标签1, pytest.mark.标签1]

03

运用1-标记用例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2021/4/20 19:24 下午
# @Author : Maynard
# @File : demo01_mark.py
# @Software: PyCharm


import pytest


class TestLogin():
    @pytest.mark.success
    def test_login(self):
        pass


    @pytest.mark.error
    def test_login_error(self):
        pass


    @pytest.mark.error
    def test_login_invalid(self):
        pass


if __name__ == '__main__':
    pytest.main(['-m error','demo01_mark.py'])

运行

# 1、命令行方式运行(-m 含义为mark,标记)
pytest demo01_mark.py -m  "error"


# 2、直接使用main函数运行
pytest.main(['-m error','demo01_mark.py'])

结果

pytest如何输入彩色日志 pytest标记_pytest如何输入彩色日志

会发现上述有3 warning,是因为没有pytest.ini配置文件中参数,如下

04

结合pytest.ini配置文件使用

[pytest] 
markers =
# mark 标记说明
    success :this is success case
    smoke   :this is smoke case
    login   :this is login case
    error   :this is error case

pytest如何输入彩色日志 pytest标记_nginx_02

再次运行时,就会发现没有warning了

pytest.ini配置文件说明

  1. 文件名必须为pytest.ini,名字不能随意改动;
  2. 配置文件可以放在项目根目录下, 全局生效;
  3. markers它的作用是注册标记,不能写成mark;
  4. 使用pytest.ini中参数时,是不需要导入操作的;
  5. 标记名‘error’后面是注释,可以写在冒号后面;
  6. 后续会介绍pytest.ini其他更多的功能;

05

运用2-标记类 or 标记模块 

class TestLogin():
    # 单个标记
    pytestmark = [pytest.mark.error]
    
    # 多个标记
    pytestmark = [pytest.mark.error,pytest.mark.success]
    
    def test_login(self):
        pass


    def test_login_error(self):
        pass


    def test_login_invalid(self):
        pass


if __name__ == '__main__':
    pytest.main(['-m error','demo01_mark.py'])
   
  '''
  此类会有三条用例运行pass,标记的都被运行,并且都通过
  '''

结果

pytest如何输入彩色日志 pytest标记_python_03

06

总结

  1. 一条用例可以有多个标记;
  2. 可以同时运行符合多个条件的标签,-m "success and error";
  3. 取消警告信息,需要结合pytest.ini文件来使用;
  4. 可以使用pytest.mark来标记类、模块,多个标记使用列表形式;

07

PS

  1. 后续会继续总结pytest框架,个人觉得最强py单元测试框架;