您的位置:

pytest-m详解

一、pytest模块

pytest是一个轻量级的Python测试框架,它允许使用Python进行简单而且容易的测试编写。通常情况下,pytest通过Python自带的unittest模块运行测试用例。pytest-m是pytest框架中的一个插件,它可以实现对pytest命令行参数的自定义管理。

二、pytest命令行运行不了

pytest命令行运行需要保证pytest已经被正确安装,可以使用pip进行安装。

pip install -U pytest

注意:在安装过程中应该保证网络畅通,避免一些网络问题导致包下载失败。

三、pytest命令行

pytest-m作为pytest插件,可以直接在pytest命令行中使用。pytest-m使用-p参数来启用该插件。

pytest -p pytest_m

启用pytest-m插件之后,就可以在命令行中使用pytest-m的函数了。例如,在pytest-m中提供了一个pytest_addoption函数,可以用于在命令行中添加自定义参数。

def pytest_addoption(parser):
    parser.addoption(
        "--myopt", action="store_true", default=False, help="My Option: Requires Name"
    )

四、pytest命名规则

pytest-m并不会改变pytest的命名规则,因此,我们仍然可以按照pytest命名规则编写测试用例函数。pytest-m将会为该测试用例函数添加自定义参数。例如,我们可以使用test_作为函数名前缀,并使用assert语句进行断言操作。

def test_example():
    assert 1 == 1

五、pytest目录结构

pytest-m能够兼容pytest的目录结构,通常我们在项目根目录下创建一个名为tests的文件夹,并在其中放置所有的测试代码。例如:

-- project
 |-- tests
 |   |-- test_module1.py
 |   |-- test_module2.py
 |   +-- test_module3.py
 +-- src
     |-- module1.py
     |-- module2.py
     +-- module3.py

六、pytestmark

pytestmark是pytest的一个内置装饰器,可以用于将自定义标记与测试函数进行关联。pytest-m可以使用pytestmark来实现对测试用例进行筛选。

def pytest_collection_modifyitems(items):
    for item in items:
        if "my_mark" in item.keywords:
            item.add_marker(pytest.mark.my_mark)

这段代码可以在执行测试用例前检查标记是否存在,如果测试用例中存在my_mark标记,那么就将该测试用例与my_mark关联起来。

七、pytest命令行传参

pytest-m使能实现对pytest命令行参数进行自定义,可以使用pytest_addoption函数来添加自定义参数,然后使用request.config.getoption()方法来获取该参数的值。例如:

def pytest_addoption(parser):
    parser.addoption(
        "--myopt", action="store_true", default=False, help="My Option: Requires Name"
    )

def test_myopt(pytestconfig):
    if pytestconfig.getoption("myopt"):
        print("Enable my Option")
    else:
        print("Disable my Option")

八、pytest命令行参数

pytest-m除了支持自定义参数之外,还支持pytest命令行参数的传递。这可以通过pytestconfig对象来实现。pytestconfig对象是一个Pytest内置对象,它提供了当前测试的各种配置选项,包括添加的自定义选项。例如:

def test_pytest_config(pytestconfig):
    print("rootdir:{}".format(pytestconfig.rootdir))
    print("args:{}".format(pytestconfig.args))
    print("inifile:{}".format(pytestconfig.inifile))
    print("trace:{}".format(pytestconfig.trace))

九、pytest面试

如果你想参加pytest面试,那么你需要了解Pytest框架的基本原理、使用方法及其相关插件。同时,还应该了解到pytest-m是一个重要的插件之一,它可以极大地方便我们对pytest命令行参数的管理。在面试中,面试官可能会结合实际场景进行提问,需求不同,需要分析不同的场景来解决问题。

十、pytest命令选取

在pytest中可以使用通配符选取需要执行的测试文件或函数,例如:

pytest test_example.py #执行指定文件
pytest test_example.py::test_function #执行指定函数
pytest test_*.py #执行以test_开头的所有测试文件
pytest test_example.py -k 'function_name' #执行函数名称包含function_name字符串的函数
pytest test_example.py -m 'test' # 执行包含test标记的函数
pytest --last-failed # 重执行上次测试失败的用例