03,pytest-mark

mark主要用于在测试用例/测试类中给用例打标记(只能使用已注册的标记 名),实现测试分组功能,并能和其它插件配合设置测试方法执行顺序等。如下 图,现在需要只执行红色部分的测试方法,其它方法不执行。

 

1、mark 标签使用方法

  • 注册标签名
  • 在测试用例/测试类前面加上:@pytest.mark.标签名(打标记范围:测试用例、测试类、模块文件)
  • 运行时,根据用例标签过滤(-m 标签名)

 

 

2、注册标签方法

通过.pytest.ini配置文件注册

    • 首先在项目根目录创建一个文件 pytest.ini ,这个是 pytest 的配置文件;
    • 然后在 pytest.ini 文件的 markers 中写入你的 mark 标记, 冒号 “:” 前面是标记名称,后面是 mark 标记的说明,可以是空字符串;
    • 注意:pytest.ini 文件中只能使用纯英文字符,绝对不能使用中文的字符(尤其是冒号和空格)!
# pytest.ini
 
[pytest]
markers = 
    login   : 'marks tests as login'
    logout  : 'marks tests as logout'
    success : 'marks tests as success'
    failed  : 'marks tests as failed'

  

  ②规范使用mark标记

注册完 mark 标记之后 pytest 便不会再告警,但是有时手残容易写错 mark 名,导致 pytest 找不到用例,一时想不开很难debug,尤其是团队协作时很容易出现类似问题,所以我们需要 “addopts = --strict” 参数来严格规范 mark 标记的使用!

    1. 在 pytest.ini 文件中添加参数 “addopts = --strict”;
    2. 注意要另起一行,不要在 markers 中添加;
    3. 添加该参数后,当使用未注册的 mark 标记时,pytest会直接报错:“ 'xxx' not found in `markers` configuration option ”,不执行测试任务;
    4. 注意:pytest.ini 配置文件不支持注释,不支持注释,不支持注释...
    1. # pytest.ini
       
      [pytest]
      markers = 
          login   : 'marks tests as login'
          logout  : 'marks tests as logout'
          success : 'marks tests as success'
          failed  : 'marks tests as failed'
       
      addopts = --strict

       

        

 

 

 

3.使用 @pytest.mark.xxx 标记测试用例

①可以标记测试方法、测试类,标记名可以自定义,最好起有意义的名字;

②同一测试类/方法可同时拥有多个标记;

 

 

 

 

 

# test_login_logout.py
 
import pytest
 
 
@pytest.mark.login
class TestLogin:
    """登陆功能测试类"""
 
    @pytest.mark.smoke
    @pytest.mark.success
    def test_login_sucess(self):
        """登陆成功"""
 
        # 实现登陆逻辑
        pass
 
    @pytest.mark.failed
    def test_login_failed(self):
        """登陆失败"""
 
        # 实现登陆逻辑
        pass
 
 
@pytest.mark.logout
class TestLogout:
    """登出功能测试类"""
 
    @pytest.mark.smoke
    @pytest.mark.success
    def test_logout_sucess(self):
        """登出成功"""
 
        # 实现登出功能
        pass
 
    @pytest.mark.failed
    def test_logout_failed(self):
        """登出失败"""
 
        # 实现登出功能
        pass

 

4.运行标记的用例

使用 -m 参数运行标记的测试用例;

-m 参数支持 and、or 、not 等表达式;

# 运行登陆功能的用例
pytest.main(['-m login'])
# 运行登出功能的用例
pytest.main(['-m logout'])
# 运行功能成功的用例
pytest.main(['-m success'])
# 运行功能失败的用例
pytest.main(['-m failed'])
# 运行登陆功能但是不运行登陆失败的测试用例
pytest.main(['-m login and not failed'])
# 运行登出功能但是不运行登出成功的测试用例
pytest.main(['-m logout and not success'])
# 运行登陆和登出的用例
pytest.main(['-m login or logout'])

或者在控制台输入命令:

# 通过标记表达式执行
pytest -m login
这条命令会执行目录下被装饰器@pytest.mark.login装饰的所有测试用例

# 运行指定模块下打login标记的用例:
pytest -m login TestCases/test_pytest.py
 
# 运行指定测试目录下打login标记的用例
pytest -m login TestCases/
 
# 通过节点id来运行:
pytest TestCases/test_pytest.py::TestDemo::test_demo01
 
# 通过关键字表达式过滤执行
pytest -k add XX.py 
(表示运行xx.py中包含add的测试用例)

 

 

 

posted @ 2021-01-19 14:50  似梦千寻  阅读(250)  评论(0)    收藏  举报