2017-02-23 3 views
0

Die Firma, die ich arbeite, hat einen Testserver, der alle Testdaten enthält. Ich versuche einige dringend benötigte Komponententests hinzuzufügen, die unsere Django-Datenbank auf dem Testserver referenzieren. Das Problem, das ich habe, ist, dass die Testdatenbank erstellt wird, anstatt auf die von mir bereitgestellte Datenbank zu zeigen. Ich hatte versucht, die Datenbank, wenn der Test in dem System Argumenten wie diese Einstellung:So testen Sie gegen bestimmte Datenbank

if 'test' in sys.argv: 
    DATABASES = { 
     'default': { # VM Testing 
      'ENGINE': 'sql_server.pyodbc', 
      'NAME': 'x', 
      'USER': 'x', 
      'PASSWORD': "x", 
      'HOST': 'x.x.x.x', # 
      'PORT': '', 
      'OPTIONS': { 
       'driver': 'FreeTDS', 
       'dsn': 'mssql_staging_1', 
       'extra_params': 'TDS_VERSION=8.0', 
       'use_legacy_datetime': False 
      }, 
     }, 
    } 

    DEBUG = False 
    TEMPLATE_DEBUG = False 

Und während es in die diesem if-Anweisung macht, wird die Testdatenbank noch erstellt, wenn Python manage.py Test ausgeführt wird. Irgendein Rat? Und meine FWIW alle meine Tests zu diesem Punkt verwenden DRF und seine APITestCase-Klasse. Vielen Dank!

EDIT:

ich versuchte mit Python manage.py Test -k Aber Django ist immer noch die Standard-Test-Datenbank. Ich warf eine Set-Spur ein, um zu überprüfen, dass keine Objekte gefunden wurden. Die Terminal-Ausgabe war:

Using existing test database for alias 'default'... 

Hier ist meine aktualisiert aktualisierten Einstellungen:

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'x', 
     'USER': 'x', 
     'PASSWORD': "x", 
     'HOST': 'x.x.x.x', 
     'PORT': '', 
     'OPTIONS': { 
      'driver': 'FreeTDS', 
      'dsn': 'mssql_staging_1', 
      'extra_params': 'TDS_VERSION=8.0', 
      'use_legacy_datetime': False 
     } 
    }, 
    'replica': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'x', 
     'USER': 'x', 
     'PASSWORD': "x", 
     'HOST': 'x.x.x.xreplica', 
     'PORT': '', 
     'OPTIONS': { 
      'driver': 'FreeTDS', 
      'dsn': 'mssql_staging_1', 
      'extra_params': 'TDS_VERSION=8.0', 
      'use_legacy_datetime': False 
     }, 
     'TEST': { 
      'MIRROR': 'default', 
     } 
    } 
} 
+1

Sie könnten einen Spiegel dieser bestehenden Datenbank wie in der [hier Dokumentation] gezeigt (https://docs.djangoproject.com/ de/1.9/topics/test/advanced/# testing-primary-replica-configurations) – Neelik

+1

für 1.8+ können Sie die '--keepdb' Flag http://stackoverflow.com/a/37100979/4724196 – HassenPy

+0

@Neelik I verwenden Ich habe das auch versucht, aber das hat auch nicht funktioniert. –

Antwort

1

Ich konnte endlich meinen Test Runner Arbeits erhalten, indem Sie folgendermaßen vorgehen:

zog ich den Test Bedingung aus meiner Staging-Einstellungsdatei in eine Testeinstellungsdatei (genannt testing.py)

Die Datenbankkonfiguration:

if 'test' in sys.argv: 
    # WILL NOT WORK WHEN IF IS MISSING 
    DATABASES = { 
     'default': { # VM Testing 
      'ENGINE': 'sql_server.pyodbc', 
      'NAME': 'x', 
      'USER': 'x', 
      'PASSWORD': "x", 
      'HOST': 'x.x.x.x', 
      'PORT': '', 
      'OPTIONS': { 
       'driver': 'FreeTDS', 
       'dsn': 'mssql_staging_1', 
       'extra_params': 'TDS_VERSION=8.0', 
       'use_legacy_datetime': False 
      }, 
      'TEST': { 
       'MIRROR': 'default', 
      } 

     }, 
    } 

und lief meinen Test mit dem folgenden Befehl:

python manage.py test --settings=Project.settings.testing -k