Я попытался запустить мои тесты с помощью pytest с помощью xdist, чтобы ускорить мои тесты (которые очень медленны, поскольку большинство из них связано с транзакциями базы данных с SQLAlchemy). Я начал их:Параллельно запускать тесты python
py.test -n 4
(так как мой MacBook Pro имеет 4 ядра)
Как результат, испытания выполняются в два раза быстрее, ранее необходимой, но многие из них не работают (они проходят, если я бегу их обычно). Таким образом, проблема заключается в том, что мой код не является потокобезопасным. Мой вопрос: как я могу создавать тесты, которые можно безопасно выполнять параллельно, учитывая, что в моем коде явно не используются потоки и выполнение асинхронного кода? Есть ли эмпирическое правило и/или специальные декораторы/TestCases для использования? И еще ... почему скорость становится 2x вместо 4x, что я ожидал?
пс. Я использую Python 3.5.1 и все мои тесты унаследовать от unittest.TestCase
Может быть, ваши тесты используют разные состояния одной и той же базы данных, и они переопределяют конфигурацию eachothers? – DainDwarf
Да, это проблема, потому что в tearDown() я удаляю записи, чтобы начать с чистой таблицы для каждого теста. – daveoncode
Тогда вам может потребоваться отдельная таблица для каждого теста (подсказка: используйте тестовый путь «to» суффикс вашей таблицы), затем отбросьте его в режиме срыва. – DainDwarf