2016-05-30 2 views
0

Я попытался запустить мои тесты с помощью pytest с помощью xdist, чтобы ускорить мои тесты (которые очень медленны, поскольку большинство из них связано с транзакциями базы данных с SQLAlchemy). Я начал их:Параллельно запускать тесты python

py.test -n 4

(так как мой MacBook Pro имеет 4 ядра)

Как результат, испытания выполняются в два раза быстрее, ранее необходимой, но многие из них не работают (они проходят, если я бегу их обычно). Таким образом, проблема заключается в том, что мой код не является потокобезопасным. Мой вопрос: как я могу создавать тесты, которые можно безопасно выполнять параллельно, учитывая, что в моем коде явно не используются потоки и выполнение асинхронного кода? Есть ли эмпирическое правило и/или специальные декораторы/TestCases для использования? И еще ... почему скорость становится 2x вместо 4x, что я ожидал?

пс. Я использую Python 3.5.1 и все мои тесты унаследовать от unittest.TestCase

+0

Может быть, ваши тесты используют разные состояния одной и той же базы данных, и они переопределяют конфигурацию eachothers? – DainDwarf

+0

Да, это проблема, потому что в tearDown() я удаляю записи, чтобы начать с чистой таблицы для каждого теста. – daveoncode

+0

Тогда вам может потребоваться отдельная таблица для каждого теста (подсказка: используйте тестовый путь «to» суффикс вашей таблицы), затем отбросьте его в режиме срыва. – DainDwarf

ответ

0

При создании UnitTest, которые могут работать параллельно вы должны быть осторожны, как вы используете ваш tearUp() и tearDown() так что вы изолировать UnitTests.

Смежные вопросы