from __future__ import unicode_literals from django.core.urlresolvers import reverse from django.test import TestCase from api.models import Inventory, Group from django.contrib.auth.models import User import time from django.db import transaction class ProductivityTest(TestCase): fixtures = ["tests/selenium/user.json"] def test_massive_creation_base(self): start = time.time() user = User.objects.all()[0] inventory = Inventory(user=user, inventory='inv') inventory.save() for i in range(20000): group = Group(inventory=inventory, group="group_{}".format(i)) group.save() time_is = time.time() - start print("base: ", time_is) # @transaction.atomic def test_transaction(self): start = time.time() user = User.objects.all()[0] inventory = Inventory(user=user, inventory='inv') inventory.save() with transaction.atomic(): for i in range(20000): group = Group(inventory=inventory, group="group_{}".format(i)) group.clean_fields(exclude=['id', 'inventory']) # group.setattr(f.attname, f.clean(raw_value, self)) # for i in group._meta.fields: # print(i.name) group.save() time_is = time.time() - start print("transaction_decorator: ", time_is) # @transaction.atomic def test_bulk(self): start = time.time() user = User.objects.all()[0] inventory = Inventory(user=user, inventory='inv') inventory.save() group_list = [] # Group.objects.bulk_create([ # Group(inventory=inventory, group="group_{}".format(group)) for group in range(20000) # if Group(inventory=inventory, group="group_{}".format(group)).clean_fields(exclude=['id', 'inventory']) is None # ]) for i in range(20000): group = Group(inventory=inventory, group="group_{}".format(i)) group.clean_fields(exclude=['id', 'inventory']) # group.save() # group = Group.objects.get(inventory=inventory, group="group_{}".format(i)) group_list.append(group) Group.objects.bulk_create(group_list) # for i in range(20000): # group = Group.objects.get(inventory=inventory, group="group_{}".format(i)) # group.save() time_is = time.time() - start print("bulk_decorator: ", time_is)