Closed NickAb closed 9 years ago
Пока, кажется, это самое простое решение. Работает через соглашения, если в плагине необходимо исползьовать "общий" контекст между процессами, то плагин в основном потоке должен создать этот контекст и сохранить его в поле класса mp_context
. При запуске теста на потоке, тест раннер восстановит поле mp_context
для текущего потока значением из основого до начала конфигурирования плагина. Плагин сам отвечает за то, чтобы забрать из этого поля контекст и присвоить его в нужные переменные.
Проверил на Windows. Юнит-тесты прошли, но думаю стоит проверить на nix с --with-xunit --processes=2
:+1:
Тесты на travis-ci падают так как я захардкодил индекс xunit плагина на время экспериментов в 0, а в тестах 0 плагином идет dataprovider или еще какой-то.
Это пока очень черновой вариант, чтобы посмотреть можно ли сделать, чтобы работало у всех (win и linux). Что получилось: первый раз плагины инициализируются на основном потоке, тут как раз можно создать все шаримые объекты и сохранить их в классе. Когда тесты запускают на процессе, то файл импортируется повторно и поэтому переменные затираются и их надо восстановить, для этого я перед вызовом __runner восстановил их для xunit (для 0 плагина).
Надо бы это на никсах проверить при запуске
lode_runner tests.py -s --processes=2 --with-xunit
.И вот тут надо разобраться можно ли как-то обойтись без их ручного восстановления, необходимого из-за первичной инициализации значений при импорте файла, например, с помощью какой-то магии метаклассов для инициализации полей класса. Возможно я где-то написал что-то лишнее.
Заметки для себя на дальнейшие направления