pytestを使ってxdistのテストを実行しようとしましたが、テストのスピードを上げるために(SQLAlchemyとのデータベーストランザクションが大半を占めているため、非常に遅いです)。私が実行した場合(彼らが通過、その結果Pythonテストを並行して実行
(私のMacBook Proは、4つのコアを持っているので)
py.test -n 4
以前に必要な半分の時間でテストを実行し、それらの多くは失敗:私はそれらを開始しましたそれらは通常)。 問題は、私のコードがスレッドセーフではないように思えます。 私の質問は、コードが明示的にスレッドと非同期コードの実行を利用していないことを考慮して、安全に並行して実行できるテストを作成するにはどうすればいいですか? 使用する経験則や特別なデコレータ/テストケースはありますか? さらに、スピードが私が期待していた4倍の代わりに2倍になるのはなぜですか?
ps。私は、Python 3.5.1を使っていますし、あなたがあなたのtearUp()
とtearDown()
ので、あなたはユニットテストを隔離んを使用する方法に注意する必要があり、並列に実行できるのunittestを作成する場合は、すべて私のテストはunittest.TestCase
あなたのテストで同じデータベースの異なる状態が使用され、それぞれの構成が上書きされることはありますか? – DainDwarf
これは本当に問題です。なぜなら、tearDown()では各テストのクリーンなテーブルで開始するためにレコードを削除するからです。 – daveoncode
次に、テストごとに別々のテーブルを用意する必要があります。テーブルに接尾辞を付けてください)、それをティアダウンにドロップしてください。 – DainDwarf