【问题标题】:Identifying which test case is running on pytest-xdist processes识别在 pytest-xdist 进程上运行的测试用例
【发布时间】: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-level pytest 选项查看日志。您可以使用os.getpid() 获取当前 xdist runner 进程的 pid。
  • 另外,在使用 xdist 时查看此解决方法以打印到终端:stackoverflow.com/a/37210976/2312300

标签: python linux process pytest


【解决方案1】:

从 pytest-dist 2.4 开始,有一个解决方案可以显示正在运行的测试用例。它需要一个额外的包setproctitle

从系统环境中识别工作人员

2.4 版中的新功能

如果安装了 setproctitle 包,pytest-xdist 将使用它来更新其工作人员的进程标题(命令行)以显示其当前状态。使用的标题是 [pytest-xdist running] file.py/node::id 和 [pytest-xdist idle],在 Linux、Mac OS X 和 BSD 系统上的 ps 和 top 等标准工具中可见。对于 Windows,请遵循 setproctitle 关于 Process Explorer 工具的指针。

这纯粹是为了作为 UX 增强,例如跟踪长时间运行或 CPU 密集型测试的问题。更改标题的错误会被忽略。请尽量不要依赖外部脚本中的标题格式或标题更改。

https://pypi.org/project/pytest-xdist/#identifying-workers-from-the-system-environmentbas

【讨论】:

    猜你喜欢
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多