尝试使用 LiveServerTestCase 测试 Flask 应用程序时出现 "Can't pickle local object 'LiveServerTestCase'" 错误
Getting a "Can't pickle local object 'LiveServerTestCase'" error when trying to use LiveServerTestCase to test Flask app
我在尝试使用来自 flask_testing 的 LiveServerTestCase 在我的 Flask 应用程序上 运行 进行单元测试时收到标题中提到的错误。
这是我的测试文件:
from app import create_app
from flask_testing import LiveServerTestCase
class TestBase(LiveServerTestCase):
def create_app(self):
app = create_app()
app.config.update(LIVESERVER_PORT=8847, TESTING=True)
return app
def test_app(self):
self.assertEqual('test', 'test')
这是我使用 nose2 进行测试时遇到的错误 运行:
AttributeError: Can't pickle local object 'LiveServerTestCase._spawn_live_server.<locals>.worker'
During handling of the above exception, another exception occurred:
AttributeError: 'NoneType' object has no attribute 'terminate'
Internal Error: runTests aborted: 'NoneType' object has no attribute 'terminate'
我真的在网上找不到任何关于这个问题的有用信息,
无法真正确定可能的原因。
但很抱歉,您是否检查过您使用的烧瓶版本以及它当前与您的 python 版本的兼容性。
我也 运行 关注这个问题并想 post 这样其他人可能有一个开始的地方,而不需要像我一样深入调查--
我在这里找到了部分答案,至少可以帮助我弄清楚发生了什么:
https://github.com/pytest-dev/pytest-flask/issues/104
显然 OSX 您需要 运行 下面的代码来将多处理样式切换为 fork而不是 spawn,它是新的默认值并且与 pickle 不兼容:
multiprocessing.set_start_method("fork")
我正在 Windows 上开发,所以据我所知我有点不走运-
但是我有另一个测试服务器 运行ning CentOs 所以为了概念证明我尝试 运行ning 那里的测试并且它没有问题!
最后:在另一个问题线程中,我发现以下内容可能会有所帮助,Windows 人们提出了一个解决方法:
https://github.com/pytest-dev/pytest-flask/issues/54
我在尝试使用来自 flask_testing 的 LiveServerTestCase 在我的 Flask 应用程序上 运行 进行单元测试时收到标题中提到的错误。
这是我的测试文件:
from app import create_app
from flask_testing import LiveServerTestCase
class TestBase(LiveServerTestCase):
def create_app(self):
app = create_app()
app.config.update(LIVESERVER_PORT=8847, TESTING=True)
return app
def test_app(self):
self.assertEqual('test', 'test')
这是我使用 nose2 进行测试时遇到的错误 运行:
AttributeError: Can't pickle local object 'LiveServerTestCase._spawn_live_server.<locals>.worker'
During handling of the above exception, another exception occurred:
AttributeError: 'NoneType' object has no attribute 'terminate'
Internal Error: runTests aborted: 'NoneType' object has no attribute 'terminate'
我真的在网上找不到任何关于这个问题的有用信息,
无法真正确定可能的原因。 但很抱歉,您是否检查过您使用的烧瓶版本以及它当前与您的 python 版本的兼容性。
我也 运行 关注这个问题并想 post 这样其他人可能有一个开始的地方,而不需要像我一样深入调查--
我在这里找到了部分答案,至少可以帮助我弄清楚发生了什么: https://github.com/pytest-dev/pytest-flask/issues/104
显然 OSX 您需要 运行 下面的代码来将多处理样式切换为 fork而不是 spawn,它是新的默认值并且与 pickle 不兼容:
multiprocessing.set_start_method("fork")
我正在 Windows 上开发,所以据我所知我有点不走运- 但是我有另一个测试服务器 运行ning CentOs 所以为了概念证明我尝试 运行ning 那里的测试并且它没有问题!
最后:在另一个问题线程中,我发现以下内容可能会有所帮助,Windows 人们提出了一个解决方法: https://github.com/pytest-dev/pytest-flask/issues/54