2011-02-07 46 views
2

我有一个使用多个数据库的django项目。我正在使用django-nose作为测试跑步者。测试数据使用灯具加载到默认数据库。我有第二个数据库没有由Django模型管理,我想在测试之前创建一个结构并加载一些数据,使用raw sql。django使用原始sql测试加载数据

有没有办法以某种方式干净的方式做到这一点?

谢谢。

回答

2

高程的Stathis,

这里是我的情况,我是如何解决这 - 情况因人而异..

1)我建立一个testrunner并重写setup_databases方法。我需要这样做,因为我想从外部创建这个数据库。我们有自定义表格和函数。我从字面上使用相同的代码与一个小的偏差

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)添加到您的settings.py TEST_RUNNER = 'IManageTestRunner'

3)一旦被创建,然后我知道我的测试数据库的创建。然后,我会创建外部填充的测试,并根据测试结果进行测试。

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) 

希望能帮助我花了一段时间才弄明白。我仍然有一个问题(做重复插入/查询..)