Search code examples
pythondjangodjango-testing

How can i stop django to recreate test database


I am new to django testing and i have just one simple print hello line in djnago test

class SimpleTest(TestCase):
    def setUp(self):
        self.kid = mommy.make(User)

    def test_details(self):
        print self.kid
        self.assertEqual(200, 200)

I run the test with this command

./manage.py test tests/myapp/

It really takes 3 minutes to run that test. djnago first says creating database and waits for 3 minutes to show result.

If chnage one word in test then again i have to wait for 3 minutes. Its very annoying.

I think it may be beacuse its recreating database everytime with many migrations.

Is there any way to make it fast or stop recreating database every time.

I am using django 1.7

The latest dev version has command --keepdb but its not in 1.7


Solution

  • If you are just testing for development purposes, I'd recommend setting your testing database to use sqlite3, which will leverage an in-memory database by default and should speed up tests.

    I usually put this into local_settings which only gets executed for my dev environment...

    if 'test' in sys.argv:
        DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}
    

    If you are planning to push a release to a production environment, you'll want to test against the engine which is serving your production database (MySQL, PostgreSQL, etc).