一、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 # 重执行上次测试失败的用例