pytest 从命令行执行时不能自动停留在断点处太麻烦了,
在 launch. json
中配置好调试器可解决:
首先,如果本地没有 launch.json 的话,增加一个调试配置:
然后进入 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 就好了。
在底下勾选你想要捕捉的error
勾选后面两个时,就会自动在触发bug时停下
附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: 显示可用的标记。