Pytest命令行选项的具体使用

 更新时间:2023年11月03日 09:45:57   作者:旦莫  
pytest是一个流行的Python测试框架,它提供了许多命令行选项,本文主要介绍了Pytest命令行选项的具体使用,具有一定的参考价值,感兴趣的可以了解一下

pytest 是一个流行的 Python 测试框架,它提供了许多命令行选项,可以帮助用户更好地控制测试执行过程。在使用 pytest 进行测试时,熟悉 pytest 的命令行选项非常重要,这将有助于减少错误和提高测试效率。本文将详细介绍 pytest 的命令行选项,并给出示例。

一、pytest 命令行选项分类

pytest 的命令行选项可以分为三类:

  • 环境配置选项:这些选项用于设置 pytest 的环境配置,例如设置日志级别、覆盖配置文件、设置测试模式等。
  • 测试过滤选项:这些选项用于过滤和选择测试用例,例如指定测试目录、选择特定测试模块、运行指定测试函数等。
  • 测试执行选项:这些选项用于控制 pytest 的测试执行过程,例如重试失败测试、生成测试报告、并行执行测试等。

下面,我们将逐一介绍这些命令行选项的具体用法。

二、环境配置选项

--version:打印 pytest 版本号。

-h, --help:显示 pytest 命令行选项和使用说明。

--verbose, -v:增加测试结果输出的详细程度。

--quiet, -q:减少测试结果输出的详细程度。

--traceconfig:显示解析和加载配置文件时的详细信息。

--pdb:当测试失败或者发生异常时,进入 Python 调试器。

--pdbcls:自定义调试器的类型。

--capture:设置 pytest 的标准输出流捕获方式,有三个值可选:sys、fd、no。

--norecursedirs:设定哪些目录不搜索测试用例。

--rootdir:设置 pytest 的根目录。

--maxfail=n:设定在第 n 次测试失败后停止测试执行。

--junit-xml=PATH:将测试结果输出到 JUnit XML 文件中。

三、测试过滤选项

path:指定测试目录或文件,可以是相对路径或绝对路径。例如:pytest tests/。

-m:选择特定标记的测试用例进行执行。例如:pytest -m "slow"。

-k:选择包含某个关键字的测试用例进行执行。例如:pytest -k "add or subtract"。

-x:遇到一条测试用例失败就停止测试执行。

--pdb:当测试失败或者发生异常时,进入 Python 调试器。

--lf:只重跑上次测试失败的测试用例。

--ff:只重跑上次测试失败的测试用例,并在全部测试结束后再重新运行一遍这些测试用例。

--sw:重跑上次修改过的测试模块。

--last-failed-no-failures:只重跑上次失败的测试用例(如果没有失败的测试用例,则不执行测试)。

--collect-only:只执行测试用例的收集阶段,不运行测试用例的执行阶段。

--pdbcls:自定义调试器的类型。

--trace:显示 pytest 的内部跟踪信息。

--count:运行指定数量的测试用例。例如:pytest -v --count=10。

四、测试执行选项

-n:并行运行测试用例,可以在后面跟一个数字指定并发度。例如:pytest -n 4。

-x:遇到一条测试用例失败就停止测试执行。

--maxfail=n:设定在第 n 次测试失败后停止测试执行。

--last-failed:只重跑上次失败的测试用例。

--failed-first:先运行之前失败的测试用例。

--reruns=n:在测试用例失败的情况下,重新运行 n 次测试。

--pdb:当测试失败或者发生异常时,进入 Python 调试器。

--pdbcls:自定义调试器的类型。

--junit-xml=PATH:将测试结果输出到 JUnit XML 文件中。

--html=PATH:将测试结果输出到 HTML 文件中。

--tb=long/short/line/native/no:设置输出错误信息的格式。

--capture=no:禁止捕获标准输出和标准错误,直接将它们输出到终端。

--capture=sys/stdout/stderr:设置 pytest 的标准输出流捕获方式,有三个值可选:sys、fd、no。

--show-capture=all/failed/no:控制是否显示捕获的标准输出流。

--disable-warnings:禁用 pytest 的警告信息。

以上是 pytest 的命令行选项介绍,通过使用这些选项,可以更好地控制 pytest 的测试执行过程,减少错误和提高测试效率。接下来我将给出部分命令行选项的代码示例及运行效果。

五、代码示例及运行效果

1.--version:打印 pytest 版本号。

该选项可以通过执行 pytest --version 命令来使用,代码示例如下:

$ pytest --version
This is pytest version 5.0.1, imported from /usr/local/lib/python3.6/site-packages/pytest.py

2.-h, --help:显示 pytest 命令行选项和使用说明。

该选项可以通过执行 pytest --help 命令来使用,代码示例如下:

$ pytest --help
usage: pytest [options] [file_or_dir] [file_or_dir] [...]

positional arguments:
  file_or_dir           test file or root directory to search for tests

optional arguments:
  -h, --help            show this help message and exit
  --version             display pytest version and information about plugins
...

3.--verbose, -v:增加测试结果输出的详细程度。

该选项可以通过执行 pytest -v 命令来使用,代码示例如下:

$ pytest -v
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [100%]

============================ 2 passed in 0.03s =============================

4.--quiet, -q:减少测试结果输出的详细程度。

该选项可以通过执行 pytest -q 命令来使用,代码示例如下:

$ pytest -q
..
2 passed in 0.03s

5.--traceconfig:显示解析和加载配置文件时的详细信息。

该选项可以通过执行 pytest --traceconfig 命令来使用,代码示例如下:

 $ pytest --traceconfig
using: pytest-5.0.1, py-1.8.0, pluggy-0.12.0
active plugins:
  * pytest_cov-2.7.1 at /Users/user/anaconda3/envs/test/lib/python3.6/site-packages/pytest_cov/plugin.py
disabled plugins:
collector: <_pytest.main.Session object at 0x107cbe3c8>

6.--pdb:当测试失败或者发生异常时,进入 Python 调试器。

该选项可以通过执行 pytest --pdb 命令来使用,在测试用例出现错误时会自动进入 pdb 调试器,代码示例如下:

$ pytest --pdb
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract FAILED                                               [100%]

=================================== FAILURES ===================================
________________________________ test_subtract ________________________________

    def test_subtract():
        assert subtract(4, 3) == 1
>       assert subtract(2, 3) == -1
E       assert 2 == -1
E        +  where 2 = subtract(2, 3)

test_example.py:10: AssertionError
----------------------------- PDB -----------------------------
> /Users/user/example/test_example.py(10)test_subtract()
...
(Pdb) 

7.--capture:设置 pytest 的标准输出流捕获方式,有三个值可选:sys、fd、no。

该选项可以通过执行 pytest --capture=sys 命令来使用,将标准输出流和标准错误输出重定向到 pytest 的日志系统中,代码示例如下:

$ pytest --capture=sys
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract FAILED                                               [100%]

=================================== FAILURES ===================================
________________________________ test_subtract ________________________________

    def test_subtract():
        assert subtract(4, 3) == 1
>       assert subtract(2, 3) == -1
E       assert 2 == -1
E        +  where 2 = subtract(2, 3)

test_example.py:10: AssertionError

[Capture] capturing logcall output to 'log': sys

8.--norecursedirs:设定哪些目录不搜索测试用例。

该选项可以通过执行 pytest --norecursedirs=examples 命令来使用,将 examples 目录从搜索测试用例的路径中排除,代码示例如下:

$ pytest --norecursedirs=examples
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [100%]

============================ 2 passed in 0.03s =============================

9.--rootdir:设置 pytest 的根目录。

该选项可以通过执行 pytest --rootdir=/path/to/project 命令来使用,将 pytest 的根目录设置为 /path/to/project,代码示例如下:

$ pytest --rootdir=/path/to/project
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [100%]

============================ 2 passed in 0.03s =============================

10.--maxfail=n:设定在第 n 次测试失败后停止测试执行。

该选项可以通过执行 pytest --maxfail=1 命令来使用,当第一条测试用例失败时会停止测试执行,代码示例如下:

$ pytest --maxfail=1
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract FAILED                                               [100%]

=================================== FAILURES ===================================
________________________________ test_subtract ________________________________

    def test_subtract():
        assert subtract(4, 3) == 1
>       assert subtract(2, 3) == -1
E       assert 2 == -1
E        +  where 2 = subtract(2, 3)

test_example.py:10: AssertionError

========================== 1 failed, 1 passed in 0.04s ==========================

11.--junit-xml=PATH:将测试结果输出到 JUnit XML 文件中。

该选项可以通过执行 pytest --junit-xml=test_results.xml 命令来使用,将测试结果输出到 test_results.xml 文件中,代码示例如下:

$ pytest --junit-xml=test_results.xml
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [100%]

============================ 2 passed in 0.03s =============================

12.path:指定测试目录或文件,可以是相对路径或绝对路径。例如:pytest tests/。

该选项可以通过执行 pytest tests/ 命令来使用,只运行 tests 目录下的测试用例,代码示例如下:

$ pytest tests/
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [100%]

============================ 2 passed in 0.03s =============================

13.-m:选择特定标记的测试用例进行执行。例如:pytest -m "slow"。

该选项可以通过在测试用例中使用 @pytest.mark 标记来进行使用,例如:

import pytest
 
@pytest.mark.slow
def test_slow():
    pass
 
def test_not_slow():
    pass

然后执行 pytest -m "slow" 命令来只运行标有 @pytest.mark.slow 标记的测试用例,代码示例如下:

$ pytest -m "slow"
test_example.py:3: PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/latest/mark.html
  @pytest.mark.slow
no tests ran in 0.00s

PytestUnknownMarkWarning: Unknown pytest.mark.slow - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/latest/mark.html

14.-k:选择包含某个关键字的测试用例进行执行。例如:pytest -k "add or subtract"。

该选项可以通过执行 pytest -k "add or subtract" 命令来使用,只运行测试用例名称中包含 "add" 或者 "subtract" 字符串的测试用例,代码示例如下:

$ pytest -k "add or subtract"
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [100%]

============================ 2 passed in 0.03s =============================

15.-x:遇到一条测试用例失败就停止测试执行。

该选项可以通过执行 pytest -x 命令来使用,在第一条测试用例失败时会停止测试执行,代码示例如下:

$ pytest -x
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract FAILED                                               [100%]

=================================== FAILURES ===================================
________________________________ test_subtract ________________________________

    def test_subtract():
        assert subtract(4, 3) == 1
>       assert subtract(2, 3) == -1
E       assert 2 == -1
E        +  where 2 = subtract(2, 3)

test_example.py:10: AssertionError

========================== 1 failed, 1 passed in 0.04s ==========================

16.--lf:只重跑上次测试失败的测试用例。

该选项可以通过执行 pytest --lf 命令来使用,在上次测试用例出现错误时会自动重新运行失败的测试用例,代码示例如下:

$ pytest --lf
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract FAILED                                               [100%]

=================================== FAILURES ===================================
______________________ test_subtract[2-3] ______________________

x = 2
y = 3

    def test_subtract(x, y):
        assert subtract(x, y) == -1

tests/test_example.py:10: AssertionError
------------------------------ rerun test call -------------------------------
test_example.py::test_subtract[x

17.--ff:只重跑最后一次测试失败的测试用例。

该选项可以通过执行 pytest --ff 命令来使用,在上次测试用例出现错误时会自动重新运行最后一个失败的测试用例,代码示例如下:

$ pytest --ff
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract FAILED                                               [100%]

=================================== FAILURES ===================================
________________________________ test_subtract ________________________________

    def test_subtract():
        assert subtract(4, 3) == 1
>       assert subtract(2, 3) == -1
E       assert 2 == -1
E        +  where 2 = subtract(2, 3)

test_example.py:10: AssertionError
------------------------------- Captured stdout --------------------------------
subtraction of 2 and 3 is -1

========================== 1 failed, 1 passed in 0.04s ==========================

18.--failed-first:在所有测试用例之前先运行上次测试失败的测试用例。

该选项可以通过执行 pytest --failed-first 命令来使用,会先运行上次测试失败的测试用例,然后再运行剩下的测试用例,代码示例如下:

$ pytest --failed-first
test_example.py::test_subtract FAILED                                               [100%]
test_example.py::test_add PASSED

=================================== FAILURES ===================================
________________________________ test_subtract ________________________________

    def test_subtract():
        assert subtract(4, 3) == 1
>       assert subtract(2, 3) == -1
E       assert 2 == -1
E        +  where 2 = subtract(2, 3)

test_example.py:10: AssertionError
----------------------------- Captured stdout -----------------------------
subtraction of 2 and 3 is -1

========================== 1 failed, 1 passed in 0.03s ==========================

19.-n, --numprocesses:指定并发进程数量。

该选项可以通过执行 pytest -n 4 命令来使用,将测试用例分配到 4 个并发进程中运行,代码示例如下:

$ pytest -n 4
test_example.py::test_add PASSED                                                   [ 25%]
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [ 75%]
test_example.py::test_subtract PASSED                                              [100%]

============================ 4 passed in 0.02s =============================

20.-d, --dist:启用分布式测试。

该选项可以通过执行 pytest --dist=loadfile 命令来使用,通过加载多个 Python 进程并在所有进程中分发测试运行,代码示例如下:

$ pytest --dist=loadfile
test_example.py::test_add PASSED                                                   [ 25%]
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [ 75%]
test_example.py::test_subtract PASSED                                              [100%]

============================ 4 passed in 0.02s =============================

21.--durations=n:按运行时间对测试用例进行排序,并显示最慢 n 条测试用例的运行时长。

该选项可以通过执行 pytest --duration=2 命令来使用,显示运行时间最慢的两条测试用例的运行时长,代码示例如下:

$ pytest --duration=2
test_example.py::test_add PASSED                                               [ 50%]
test_example.py::test_subtract PASSED                                          [100%]

======================== slowest 2 test durations =========================
0.01s call     test_example.py::test_subtract
0.01s call     test_example.py::test_add
============================ 2 passed in 0.02s =============================

22.--show-capture:在结果中显示测试用例标准输出流和标准错误输出。

该选项可以通过执行 pytest --show-capture 命令来使用,将测试用例的标准输出流和标准错误输出显示在测试结果中,代码示例如下:

$ pytest --show-capture
test_example.py::test_add PASSED                                                   [ 50%]
test_example.py::test_subtract PASSED                                              [100%]

================================== Captured stdout =================================
subtraction of 4 and 3 is 1
subtraction of 2 and 3 is -1

============================ 2 passed in 0.03s =============================

以上就是 pytest 命令行选项的详细介绍和相应的代码示例,希望可以帮助你更好地使用 pytest 进行测试。更多相关Pytest命令行选项内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python猜解网站数据库管理员密码的脚本

    Python猜解网站数据库管理员密码的脚本

    这篇文章主要和大家分享一个Python脚本,可以实现猜解网站数据库管理员的密码。文中的示例代码讲解详细,需要的小伙伴可以参考一下
    2022-02-02
  • Python编程求质数实例代码

    Python编程求质数实例代码

    这篇文章主要介绍了Python编程求质数实例代码,对求200,1000和100000以内的质数进行了测试,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • PyCharm中关于安装第三方包的三个建议

    PyCharm中关于安装第三方包的三个建议

    这篇文章主要介绍了PyCharm中关于安装第三方包的三个建议,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Pytorch随机数生成常用的4种方法汇总

    Pytorch随机数生成常用的4种方法汇总

    随机数广泛应用在科学研究,但是计算机无法产生真正的随机数,一般成为伪随机数,下面这篇文章主要给大家介绍了关于Pytorch随机数生成常用的4种方法,需要的朋友可以参考下
    2023-05-05
  • python热力图实现简单方法

    python热力图实现简单方法

    在本篇内容里小编给大家分享的是一篇关于python热力图实现简单方法,对此有兴趣的朋友们可以学习下。
    2021-01-01
  • Python直接使用plot()函数画图的方法实例

    Python直接使用plot()函数画图的方法实例

    Python非常简单而又非常强大,它的功能之一就是画出漂亮的图表,实现数据的可视化,下面这篇文章主要给大家介绍了关于Python直接使用plot()函数画图的相关资料,需要的朋友可以参考下
    2022-05-05
  • Python自然语言处理之切分算法详解

    Python自然语言处理之切分算法详解

    这篇文章主要介绍了Python自然语言处理之切分算法详解,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • yolov5训练时参数workers与batch-size的深入理解

    yolov5训练时参数workers与batch-size的深入理解

    最近再学习YOLOv3与YOLOv5训练数据集的具体步骤,几经波折终于实现了很好的效果,这篇文章主要给大家介绍了关于yolov5训练时参数workers与batch-size的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Django 多语言教程的实现(i18n)

    Django 多语言教程的实现(i18n)

    这篇文章主要介绍了Django 多语言教程的实现(i18n),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例

    python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例

    这篇文章主要介绍了python GUI库图形界面开发之PyQt5布局控件QFormLayout详细使用方法与实例,需要的朋友可以参考下
    2020-03-03

最新评论