我正在使用pytest
和pytest-xdist
编写测试,我希望在所有工作线程开始运行之前运行pytest_sessionstart
,并在所有工作线程运行完毕之后运行pytest_sessionfinish
。
我找到了这个解决方案:链接,但未按预期工作。在测试运行期间启动和完成了多个会话。因此执行了多次清理,这导致测试失败(它清理了tmp目录,测试失败,FileNotFoundError
)。
我添加了在会话开始和结束时写入文件的代码。日志如下所示:
init 0x00007f988f5ee120
worker init gw0
...
worker init gw7
init 0x00007f229cdac2e0
cleanup 0x00007f229cdac2e0 0
init 0x00007f1a31a4e2e0
cleanup 0x00007f1a31a4e2e0 0
worker done gw0
...
worker done gw4
cleanup 0x00007f988f5ee120 1
如您所见,有些会话在所有工作进程启动之后和完成之前启动。
我的代码如下所示:
def pytest_sessionstart(session: pytest.Session):
if hasattr(session.config, 'workerinput'):
# log to file 'worker init {id}'
return
# log to file 'init {sess id}'
# do some stuff
def pytest_sessionfinish(session: pytest.Session, exitstatus: int):
if hasattr(session.config, 'workerinput'):
# log to file 'worker done {id}'
return
# log to file 'cleanup {sess id} {exitstatus}'
# do some stuff
1条答案
按热度按时间y53ybaqx1#
原来vs-code使用
--collect-only
参数在后台启动pytest。这些会话没有被过滤,因为它们不是工作会话,它们执行了init/cleanup。解决方案是增加检查参数
--collect-only
是否存在。代码: