setUpTestData ()
zu verwendenWenn Sie einen Test mit DB mit django schreiben, können Sie ihn möglicherweise schneller ausführen, indem Sie setUpTestData () verwenden.
setUpTestData()
?
setUpTestData ()
ist normalerweise setUp ()
für jede Methode Dies dient zur Durchführung der Modellinitialisierung usw., die in Klasseneinheiten durchgeführt wird. (Es kann ein wenig interessant sein, wenn Sie sich die interne Implementierung ansehen.)
Wenn Sie klassenweise initialisiert werden, wird dies natürlich nur einmal aufgerufen. Sie müssen also vorsichtig sein, wenn Sie den Status aktualisieren.
class Tests(TestCase):
def setUp(self):
from django.contrib.auth.models import User
for i in range(110):
User.objects.create_superuser("admin{}".format(i), "myemail{}@example.com".format(i), '')
def test_query(self):
from django.contrib.auth.models import User
with self.assertNumQueries(1):
actual = User.objects.filter(username__startswith="admin1").count()
self.assertEqual(actual, 11)
def test_query1(self):
from django.contrib.auth.models import User
with self.assertNumQueries(1):
actual = User.objects.filter(username__startswith="admin1").count()
self.assertEqual(actual, 11)
def test_query2(self):
from django.contrib.auth.models import User
with self.assertNumQueries(1):
actual = User.objects.filter(username__startswith="admin1").count()
self.assertEqual(actual, 11)
class Tests(TestCase):
@classmethod
def setUpTestData(cls):
from django.contrib.auth.models import User
for i in range(100):
User.objects.create_superuser("admin{}".format(i), "myemail{}@example.com".format(i), '')
def test_query(self):
from django.contrib.auth.models import User
with self.assertNumQueries(1):
actual = User.objects.filter(username__startswith="admin1").count()
self.assertEqual(actual, 11)
def test_query1(self):
from django.contrib.auth.models import User
with self.assertNumQueries(1):
actual = User.objects.filter(username__startswith="admin1").count()
self.assertEqual(actual, 11)
def test_query2(self):
from django.contrib.auth.models import User
with self.assertNumQueries(1):
actual = User.objects.filter(username__startswith="admin1").count()
self.assertEqual(actual, 11)
setUpTestData ()
Vergleichen wir die Ausführungszeit. Je mehr setUp () von der Anzahl der Testmethoden aufgerufen wird, desto langsamer wird es und desto weniger aussagekräftig ist das Verhältnis der Ergebnisse. Da es 3 Testmethoden gibt, dauert das Generieren von Daten mit setUp ()
ungefähr dreimal länger.
setUp | setUpTestData | |
---|---|---|
Anzahl der Nutzer | 100 | 100 |
Anzahl der Testmethoden | 3 | 3 |
verstrichene Zeit | 11.7s | 3.6s |
Wenn Sie es ausprobieren möchten, können Sie es anhand der folgenden Übersicht überprüfen.
https://gist.github.com/podhmo/ffc6f96e4688dfb53810f4e4d6ba4d92
Recommended Posts