pytest 从命令行执行时不能自动停留在断点处太麻烦了,

launch. json 中配置好调试器可解决:

首先,如果本地没有 launch.json 的话,增加一个调试配置:

pytest 不能识别中文目录 pytest debug_vscode


然后进入 launch.json进行具体配置。

在 configuration 列表中增加一项:

{
            "name": "Python: Test current file",
            "type": "python",
            "request": "launch",
            "module":"pytest",
            "cwd":"${workspaceFolder}",
            "args": [
            "-v",
            "${file}"
            ],
            "console": "integratedTerminal"
            },

它指定了你执行 F5 时,vscode 会自动做哪些操作。
在这个配置中,它实际执行如下:

1、切换到${workspaceFolder}",也就是当前命令行默认的工作目录。

2、指定 python.exe 解释器的位置为默认,比如你切换到虚拟环境下,那么它就指定到虚拟环境的 python.exe

3、自动开启调试器,我机器上具体执行指令如下

%user%\\.vscode\\extensions\\ms-python.python-2023.6.1\\pythonFiles\\lib\\python\\debugpy\\adapter/../..\\debugpy\\launcher 38260:这是用于启动Python调试器的命令。它启动一个名为debugpy的Python调试器,并监听端口号38260,以便IDE(集成开发环境)可以连接到调试器进行调试。

4、执行 python -m pytest {args},其中 args 上面配置指定的。如果你要修改,就要往其中添加。比如 “-s、-x ”等参数。

5、${file} 指定的是当前 py 文件

配置好以后,先切换到我们的调试配置(由 name定义),再 F5 就好了。

pytest 不能识别中文目录 pytest debug_python_02


在底下勾选你想要捕捉的error

勾选后面两个时,就会自动在触发bug时停下

pytest 不能识别中文目录 pytest debug_调试器_03

附pytest 常用的 args:

选择和过滤测试:

-k EXPRESSION: 只运行名字匹配表达式的测试。例如,pytest -k test_my_function 仅运行名为 test_my_function 的测试。
--ignore=PATH: 忽略指定路径的测试。
运行控制:

-x, --exitfirst: 遇到第一个失败的测试时立即退出。
--maxfail=num: 遇到指定数量的失败测试后退出。
--last-failed: 仅运行上次失败的测试。
测试结果报告:

-v, --verbose: 输出更详细的结果。
-q, --quiet: 减少输出的详细程度。
--lf, --last-failed: 只运行上次失败的测试。
--tb=style: 跟踪回溯输出格式 (例如,short, long, no 等)。
并行运行测试:

通过 pytest-xdist 插件,你可以使用 -n 参数来并行运行测试:-n NUM 会并行运行测试,NUM 是并发线程数。
代码覆盖率:

使用 pytest-cov 插件,你可以加上 --cov=MODULE 参数来查看代码覆盖率报告。
插件和配置:

--durations=N: 列出最慢的N个测试。
-p no:PLUGIN: 禁用一个插件。
--fixtures: 显示可用的fixture。
--markers: 显示可用的标记。