python Pytest不适用于psutil + xlwings

0wi1tuuw  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(171)

bounty还有6天到期。回答此问题可获得+50声望奖励。IHopeItWontBeAStupidQuestion希望引起更多关注这个问题。

我找到了another SO addressing a similar problem,但没有人给我答案。
我的问题如下(重现起来更简单),创建一个名为test_file.py的文件:

import psutil
import xlwings

def test() -> None:
    my_function()

def my_function() -> None:
    # Create a new workbook
    wb = xlwings.Book()
    # Save it
    wb.save('test.xlsx')
    # Close it
    wb.close()

    # Kill zombie processes
    for proc in psutil.process_iter():
        if proc.name() == "EXCEL.EXE":
            proc.kill()

if __name__ == "__main__":
    my_function()

当做python test_file.py的时候,一切都很顺利。在执行pytest来进行单元测试时,我遇到了以下错误:

test_file.py Windows fatal exception: code 0x800706ba

回溯如下:

File "C:\Users\jason\Desktop\so\test_file.py", line 6 in test
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\python.py", line 195 in pytest_pyfunc_call
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\python.py", line 1789 in runtest
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 167 in pytest_runtest_call
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 260 in <lambda>
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 339 in from_call
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 259 in call_runtest_hook
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 220 in call_and_report
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 131 in runtestprotocol
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\runner.py", line 112 in pytest_runtest_protocol
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\main.py", line 349 in pytest_runtestloop
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\main.py", line 324 in _main
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\main.py", line 270 in wrap_session
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\main.py", line 317 in pytest_cmdline_main
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_callers.py", line 39 in _multicall
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_manager.py", line 80 in _hookexec
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\pluggy\_hooks.py", line 265 in __call__
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\config\__init__.py", line 167 in main
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Lib\site-packages\_pytest\config\__init__.py", line 190 in console_main
  File "C:\Users\jason\AppData\Local\Programs\Python\Python311\Scripts\pytest.exe\__main__.py", line 7 in <module>
  File "<frozen runpy>", line 88 in _run_code
  File "<frozen runpy>", line 198 in _run_module_as_main

这一定是pytestxlwingspsutil之间的问题,因为如果我不同时使用这三个,我就不能重现这个bug。
我正在使用Python 3.11.1xlwings==0.28.6pytest==7.2.2psutil==5.9.4
使用@moken建议的上下文管理器也不起作用:

import xlwings

def test() -> None:
    my_function()

def my_function() -> None:
    with xlwings.App(visible=True):
        # Create a new workbook
        wb = xlwings.Book()
        # Save it
        wb.save('test.xlsx')
        # Close it
        wb.close()

if __name__ == "__main__":
    my_function()

会引发完全相同的错误(当使用pytest时,当不使用时,显然一切都正常)。

cbjzeqam

cbjzeqam1#

您可以尝试使用-s标志运行测试,这将禁用输出捕获。这可能会为您提供有关导致异常的原因的更多信息。

如果这不起作用,您可能需要向我们提供有关您收到的特定错误消息的更多信息,以及它发生的上下文(例如Python版本)。
您还可以对要运行的函数my_function()进行更具体的说明。
这一定是pytest、xlwings和psutil之间的问题,因为如果我不同时使用这三个,我就不能重现这个bug。

尝试其他方法也可以帮助您。

相关问题