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

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/201026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-06 11:29
下一篇 2024-12-06 11:29

相关推荐

  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25

发表回复

登录后才能评论