【发布时间】:2022-08-05 07:38:26
【问题描述】:
我正在与 pytest-forked (pytest -r sxX -n auto --cache-clear --max-worker-restart=4 --forked) 并行执行 python 单元测试,并且有一个测试用例需要相当长的时间并且在最后运行,而其他测试用例运行器/CPU 内核处于空闲状态(因为大概只有这一个测试用例需要完成)。
我想知道是哪个测试用例(可能在开始时运行它或禁用它)。请注意,这不是找到运行时间最长的测试用例的问题,因为这可能不是罪魁祸首。我正在明确地寻找某种方式来了解将哪个测试用例分配给 pytest 运行器 Python 进程。调用ps 会显示类似python -u -c import sys; exec(eval(sys.stdin.readline())) 的内容(对于机器中的许多CPU 内核),这并不是特别有用。
有没有办法给进程设置测试用例的名称,并用ps等系统工具检索它?我在 Linux 上运行这些测试用例,以防万一。
-
不幸的是,设置测试用例的名称不会出现在
ps中,有没有办法事先确定哪个是长时间运行的测试用例? -
谢谢。我可以使用带有
pytest-forked的控制台打印输出并创建一个“全局夹具”(?)打印“开始的测试用例\'xyz\'\”和\“完成的测试用例\'xyz\'\”并检查终点站?你会怎么做(我只能为每个完成的测试用例显示点)? -
所以你将它与 pytest xdist 结合使用,由于它的设计,它不允许使用 -s 标志,它在文档中被列为副作用之一
-
您不需要使用打印。您可以使用
logging记录进程ID,并使用--log-cli-levelpytest 选项查看日志。您可以使用os.getpid()获取当前 xdist runner 进程的 pid。 -
另外,在使用 xdist 时查看此解决方法以打印到终端:stackoverflow.com/a/37210976/2312300
标签: python linux process pytest