2011-02-07 5 views
2

J'ai un projet django utilisant plusieurs bases de données. J'utilise django-nose comme testeur. Les données de test sont chargées dans la base de données par défaut à l'aide d'appareils. J'ai une deuxième base de données non gérée par les modèles django, où je veux créer une structure et charger des données avant de les tester, en utilisant raw sql.django test des données de chargement en utilisant SQL brut

Y a-t-il un moyen de le faire d'une manière ou d'une autre?

Merci.

Répondre

2

Ht Stathis,

Voici mon scénario était et comment je l'ai résolu - YMMV ..

1) Je construis un testrunner et en remplaçant la méthode setup_databases. J'avais besoin de faire cela parce que je voulais créer cette base de données en externe. Nous avions des tables et des fonctions personnalisées. Je me suis littéralement utilisé le même code avec un petit écart

class IManageTestRunner(DjangoTestSuiteRunner): 
    """This is a 3 line addition to the original method""" 

    def setup_databases(self, **kwargs): 
     from django.db import connections, DEFAULT_DB_ALIAS 

     ### Skipped for brevity ### 

     for signature, (db_name, aliases) in dependency_ordered(test_databases.items(), dependencies): 
      # Actually create the database for the first connection 
      connection = connections[aliases[0]] 
      old_names.append((connection, db_name, True)) 
      test_db_name = connection.creation.create_test_db(self.verbosity, autoclobber=not self.interactive) 

      # Our little hack... 
      if db_name == "bugs": 
       create_IManage_instance(django_created_sql = True, mysql_db = "test_bugs", 
            arg = value, arg2 = value) 
      # End of our little hack.. 

      for alias in aliases[1:]: 
       connection = connections[alias] 

       ### Skipped for brevity ### 

2) Ajouter ceci à votre settings.py TEST_RUNNER = 'IManageTestRunner'

3) Une fois que cela a été créé alors je savais que mon test db a été créé. Je voudrais alors créer des tests qui ont peuplé l'extérieur et tester les résultats par rapport à cela.

def test_add_property_value(self): 
    """Test set/get a value""" 
    # This will do some external process which occcurs to the db. 
    pm = Pm(mysql_db='test_bugs', p4_port = settings.ICMSERVER_TEST_PORT) 
    pmsite, pmproject, pmvariant, pmlibtype, pmlibrary, pmrelease = pm.add_release_tree() 
    prop_type, pmvalue = ("string", "Funny Business") 
    pmproperty = "%s_%s_basic" % (pmproject.name, prop_type) 
    pm.add_property_definition(pmproperty, prop_type=prop_type) 
    pm.add_propval(pmproperty, value=pmvalue, project=pmproject.name) 

    # Now use Django to pull the value back out.. 
    project = Project.objects.get(name=pmproject.name) 
    property = project.get_property(pmproperty) 
    self.assertEqual(pmvalue, property.value) 

Espérons que cela m'a aidé m'a pris un certain temps pour le comprendre. J'ai encore un problème (faire des insertions répétées/requêtes ..)

Questions connexes