Performance: Testing models
Testing models affects development speed and feedback loop but can indirectly impact page load if tests are run during deployment.
Jump into concepts and practice - no test required
from django.test import TestCase class GoodModelTest(TestCase): def test_create(self): MyModel.objects.create(name="Name") self.assertEqual(MyModel.objects.count(), 1)
from django.test import TestCase class BadModelTest(TestCase): def test_create(self): for i in range(1000): MyModel.objects.create(name=f"Name {i}") self.assertEqual(MyModel.objects.count(), 1000)
| Pattern | DB Operations | Test Runtime | Resource Usage | Verdict |
|---|---|---|---|---|
| Creating 1000 model instances in one test | 1000 writes | Several seconds | High CPU and DB load | [X] Bad |
| Creating 1 model instance per test | 1 write | Milliseconds | Low resource usage | [OK] Good |
TestCase class?test_.def test_model(self): starts with test_, so it will be executed as a test.class Product(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class ProductTest(TestCase):
def test_str_method(self):
p = Product(name='Book')
self.assertEqual(str(p), 'Book')class UserProfile(models.Model):
age = models.IntegerField()
class UserProfileTest(TestCase):
def test_age_positive(self):
profile = UserProfile(age=-5)
self.assertTrue(profile.age > 0)class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def full_name(self):
return f"{self.first_name} {self.last_name}"
# Test code?