linux 确定哪个测试用例正在pytest-xdist进程上运行

6g8kf2rb  于 2022-12-18  发布在  Linux
关注(0)|答案(2)|浏览(148)

我正在与pytest-forked(pytest -r sxX -n auto --cache-clear --max-worker-restart=4 --forked)并行执行python单元测试,有一个测试用例需要花费相当长的时间,并且在其他测试用例运行程序/CPU内核空闲时运行(因为可能只有这一个测试用例需要完成)。
我想知道这是哪个测试案例(可能在开始时运行它或禁用它)。注意,这不是一个寻找运行时间最长的测试用例的问题,因为它可能不是罪魁祸首。我明确地寻找某种方式来知道哪个测试用例被分配给了一个pytest runner Python进程。调用ps会显示类似python -u -c import sys; exec(eval(sys.stdin.readline()))的内容(对于机器中的CPU内核数量),这不是特别有帮助。
有没有一种方法可以将测试用例的名称设置为进程,并使用诸如ps之类的系统工具来检索它?我正在Linux上运行这些测试用例,如果这是相关的话。

l5tcr1uw

l5tcr1uw1#

下面是一种查看pytest-xdist处理时哪个测试正在运行的方法。https://docs.pytest.org/en/7.1.x/reference/reference.html#_pytest.hookspec.pytest_report_teststatus
将以下函数添加到conftest.py文件中。

#conftest.py

def pytest_report_teststatus(report):
    print(report.__dict__['nodeid'])

启动pytest的命令示例:

python -m pytest -n 3 -s --show-capture=no --disable-pytest-warnings
wydwbb8l

wydwbb8l2#

从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工具的指针操作。
这纯粹是为了增强用户体验,例如,跟踪长时间运行或占用大量CPU的测试的问题。更改标题时出现的错误将被忽略而不提示。请尽量不要依赖外部脚本中的标题格式或标题更改。
https://pypi.org/project/pytest-xdist/#identifying-workers-from-the-system-environmentbas

相关问题