Lors d'un récent test de charge sur une application Django j'ai eu à créer 10K utilisateurs pour tester la charge sur le processus de login. Ce besoin de création d'utilisateur de test étant récurrent j'ai écrit une commande manage (1) afin de créer facilement un grand nombre d'utilisateurs mais également de conserver leur id pour suppression ultérieure. La liste des ids est affichée sur stdout pour faire au plus simple.

Par défaut on crée 10 utilisateurs et on spécifie comme premier argument le nombre total souhaité.

Le code de la classe, simple et efficace :

"""                                                                                                       
Create users in batch                                                                                     
"""
import json
from django.core.management.base import BaseCommand
from django.contrib.auth.models import User

class Command(BaseCommand):
    help = 'Create test accounts'

    def handle(self, *args, **options):
        nb_accounts = 10
        mac = 0
        userids = []

        if len(args) > 0:
            nb_accounts = int(args[0])

        while mac < nb_accounts:
            username = 'tsung-%04d' % (mac)
            email = 'tsung-%04d@example.com' % (mac)
            password = 'password-%04d' % (mac)
            user = User.objects.create(username=username,
                                       email=email)
            user.set_password(password)
            user.save()
            userids.append(user.id)
            mac += 1

        print json.dumps(userids)