#python #selenium #flask #pytest #flask-testing
#python #selenium #flask #pytest #flask-тестирование
Вопрос:
Я получаю ошибку, указанную в названии, при попытке запустить unittest в моем приложении Flask с использованием LiveServerTestCase из flask_testing.
Это мой тестовый файл:
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'
Я действительно не смог найти ничего полезного в Интернете по этой проблеме,
Ответ №1:
Я также столкнулся с этой проблемой и хотел опубликовать, чтобы другим было с чего начать, и им не нужно было искать так глубоко, как мне—
Я нашел здесь частичный ответ, который помог мне хотя бы понять, что происходит: https://github.com/pytest-dev/pytest-flask/issues/104
по-видимому, в OSX вам нужно запустить следующий код, чтобы переключить многопроцессорный стиль на fork вместо spawn, который является новым значением по умолчанию и несовместим с pickle:
multiprocessing.set_start_method("fork")
Я разрабатываю на Windows, поэтому, насколько я могу судить, мне немного не повезло,
но у меня есть другой тестовый сервер, на котором работает CentOS, поэтому для проверки концепции я попытался запустить тесты там, и это сработало без проблем!
наконец: в другой теме вопроса я обнаружил следующее, что может помочь, и пользователи Windows могут найти обходной путь: https://github.com/pytest-dev/pytest-flask/issues/54
Комментарии:
1. Сработало для меня, хотя мне пришлось добавить аргумент «force = True» в конце, чтобы избежать ошибки «RuntimeError: контекст уже установлен», то есть: multiprocessing.set_start_method («fork», force = True)
Ответ №2:
Не могу определить, что может быть причиной. Но, извините, что спрашиваю, вы проверили версию flask, которую используете, и ее текущую совместимость с вашей версией python.
Комментарии:
1. Спасибо. Я думал, что это может быть из-за проблем с совместимостью, но в документации Flask говорится: «Мы рекомендуем использовать последнюю версию Python 3. Flask поддерживает Python 3.5 и новее, Python 2.7 и PyPy «. Кроме того, я пробовал версии 3.6 и 3.7 и получил ту же проблему..