pytest配置pytest.ini,配置mark标签

pytest.ini 创建在项目根目录

pytest默认的测试用例收集规则

  • 文件名以 test_*.py 文件和 *_test.py
  • 以 test_ 开头的函数
  • 以 Test 开头的类,不能包含 init 方法
  • 以 test_ 开头的类里面的方法

我们是可以修改或者添加这个用例收集规则的;当然啦,是建议在原有的规则上添加的,如下配置

[pytest]
python_files =     test_*  *_test  test*
python_classes =   Test*   test*
python_functions = test_*  test*

一 标签注册

[pytest]
markers =
    smoke:marks tests as smoke.
    demo:marks tests asa demo.

备注:冒号之后是描述信息(可写可不写)。

打标记的范围:测试用例、测试类、模块文件

1.方法一

在测试用例/测试类前加上:@pytest.mark.标记名

import pytest


@pytest.mark.smoke
def test_add_01():
    b = 1 + 2
    assert 3 == b


@pytest.mark.demo
def test_add_02():
    b = 1 + 2
    assert 0 == b


@pytest.mark.smoke
class TestAdd:

    def test_add_03(self):
        b = 1 + 2
        assert 3 == b

    def test_add_04(self):
        b = 1 + 1
        assert 2 == b

也可以在一个用例上打多个标签,多次使用@pytest.mark.标签名

@pytest.mark.demo
@pytest.mark.smoke
def test_add_02():
    b = 1 + 2
    assert 0 == b

2.方法二

  • 在测试类里面,使用以下声明(测试类下,所有用例都被打上了该标签):
@pytest.mark.demo
def test_add_02():
    b = 1 + 2
    assert 0 == b


class TestAdd:

    pytestmark = pytest.mark.smoke

    def test_add_03(self):
        b = 1 + 2
        print(f'b={b}')
        assert 3 == b

    def test_add_04(self):
        b = 1 + 1
        print(f'b={b}')
        assert 2 == b

多标签模式:pytestmark = [pytest.mark.标签1, pytest.mark.标签2......]

class TestAdd:

    pytestmark = [pytest.mark.smoke, pytest.mark.demo]

    def test_add_03(self):
        b = 1 + 2
        print(f'b={b}')
        assert 3 == b

    def test_add_04(self):
        b = 1 + 1
        print(f'b={b}')
        assert 2 == b

在模块文件里,同理(py文件下,所有测试函数和测试类里的测试函数,都有该标签):

import pytest
pytestmark = pytest.mark.smoke
pytestmark = [pytest.mark.smoke, pytest.mark.demo]  # 多标签模式

三、命令行

根据测试用例/测试类/测试模块,标记了对应的标签后,使用对应的命令行在cmd中或者Pycharm中的Terminal中运行,即可进行用例的筛选,命令行为:
pytest -m 标签名
pytest - m "smoke or demo" 只运行smoke 和 demo标签

跳过用例

@pytest.mark.skip(reason='跳过的原因') 打在测试类或者测试用例上面

  • 打在测试类上面,下面的用例都不会执行。
  • 打在测试用例上面,这个用例不会执行。

@pytest.mark.skipif("sys.platform=='win32'",reason='第三方不想测')

image.png

eval(self,condition) condition是一个eval脱衣可以执行的,如果为True就跳过

image.png

condition是一个条件可以是字符串eval脱衣服的表达式,还可以直接是表达式比如:condition = 2>1

pytestmark =pytest,mark.skip() 变量pytestmark这个变量不可更改

  • 模块级跳过测试用例
image.png

myskip = pytest.mark.skip() 自定义跳过装饰器,使用一个变量接收对象。使用的时候直接@变量 打在被跳过的函数或者类

image.png

你可能感兴趣的:(pytest配置pytest.ini,配置mark标签)