I'm not sure if this is what you need, but if the problem is with the migrations not being run, you can specify a setting in your settings.py to use syncdb when running tests.
#settings.py SOUTH_TESTS_MIGRATE = False # make test database created using syncdb rather than migrations Goodluck. -- Gladys http://bixly.com On Mar 12, 5:32 am, Jumpfroggy <rocketmonk...@gmail.com> wrote: > I have an app that I'm starting to write tests for. The app uses > south for all migrations and mysql for the db. > > I wrote some tests and also created an initial_data.json fixture to > provide some default data. If I run "python manage.py test", the > database is created via sqlite, the tests are run, and then the report > is spit out. This works fine. > > However, I want to automate this where I can programmatically run > tests, find the failures, and do some custom logging/saving of the > failures. How do I run the tests in python? > > I've tried a few variations of the below code, but the problem is the > database. When I run the "python manage.py test" command, it > automatically uses sqlite3 as the backend, creates the database, and > uses it for all tests. However, when I run my own tests, it uses the > mysql backend. If I force it to use sqlite, is has problems with the > fixtures because the migrations are not run before installing the > fixtures. > > How do I run tests manually using the same database setup that happens > when using the manage.py test command? > > My code: > > import my_application.settings > > # NOTE: Use this to force the testing database to use the sqlite > engine. > my_application.settings.DATABASE_ENGINE = 'sqlite3' > > from django.core.management import setup_environ > setup_environ(my_application.settings) > > from django.conf import settings > from django.test.utils import get_runner > > verbosity = 1 > interactive = False > failfast = True > TestRunner = get_runner(settings) > > test_labels = () > > test_runner = TestRunner(verbosity=verbosity, > interactive=interactive, failfast=failfast) > failures = test_runner.run_tests(test_labels) > > And this is the error I get: > > calling TestRunner.run_tests() > verbosity: 1 > interactive: False > failfast: True > test_labels: () > connection.settings_dict: {'ENGINE': 'django.db.backends.sqlite3', > 'TEST_MIRROR': None, 'NAME': 'my_application', 'TEST_CHARSET': None, > 'TIME_ZONE': 'America/New_York', 'TEST_COLLATION': None, 'OPTIONS': > {}, 'HOST': '', 'USER': 'my_application', 'TEST_NAME': None, > 'PASSWORD': 'my_application', 'PORT': ''} > test_databases: {('', '', 'django.db.backends.sqlite3', > 'my_application'): ['default']} > Creating test database 'default'... > Syncing... > Creating table django_admin_log > Creating table auth_permission > Creating table auth_group_permissions > Creating table auth_group > Creating table auth_user_user_permissions > Creating table auth_user_groups > Creating table auth_user > Creating table auth_message > Creating table django_content_type > Creating table django_session > Creating table django_site > Creating table south_migrationhistory > Installing index for admin.LogEntry model > Installing index for auth.Permission model > Installing index for auth.Group_permissions model > Installing index for auth.User_user_permissions model > Installing index for auth.User_groups model > Installing index for auth.Message model > No fixtures found. > > Synced: > > django.contrib.admin > > django.contrib.auth > > django.contrib.contenttypes > > django.contrib.sessions > > django.contrib.sites > > south > > Not synced (use migrations): > - my_application > (use ./manage.py migrate to migrate these) > test_db_name: ':memory:' > ....Problem installing fixture 'C:\virtualenv-my_application\lib > \site-packages\django\contrib\auth\fixtures\authtestdata.json': > Traceback (most recent call last): > File "C:\virtualenv-my_application\lib\site-packages\django\core > \management\commands\loaddata.py", line 174, in handle > obj.save(using=using) > File "C:\virtualenv-my_application\Lib\site-packages\django\core > \serializers\base.py", line 165, in save > models.Model.save_base(self.object, using=using, raw=True) > File "C:\virtualenv-my_application\Lib\site-packages\django\db > \models\base.py", line 566, in save_base > created=(not record_exists), raw=raw) > File "C:\virtualenv-my_application\Lib\site-packages\django > \dispatch\dispatcher.py", line 172, in send > response = receiver(signal=self, sender=sender, **named) > File "C:\my_application\..\my_application\models.py", line 1175, > in _create_profile_for_user > profile.save() > File "C:\virtualenv-my_application\Lib\site-packages\django\db > \models\base.py", line 456, in save > self.save_base(using=using, force_insert=force_insert, > force_update=force_update) > File "C:\virtualenv-my_application\Lib\site-packages\django\db > \models\base.py", line 549, in save_base > result = manager._insert(values, return_id=update_pk, > using=using) > File "C:\virtualenv-my_application\Lib\site-packages\django\db > \models\manager.py", line 195, in _insert > return insert_query(self.model, values, **kwargs) > File "C:\virtualenv-my_application\Lib\site-packages\django\db > \models\query.py", line 1518, in insert_query > return query.get_compiler(using=using).execute_sql(return_id) > File "C:\virtualenv-my_application\Lib\site-packages\django\db > \models\sql\compiler.py", line 788, in execute_sql > cursor = super(SQLInsertCompiler, self).execute_sql(None) > File "C:\virtualenv-my_application\Lib\site-packages\django\db > \models\sql\compiler.py", line 732, in execute_sql > cursor.execute(sql, params) > File "C:\virtualenv-my_application\Lib\site-packages\django\db > \backends\sqlite3\base.py", line 200, in execute > return Database.Cursor.execute(self, query, params) > DatabaseError: no such table: my_application_profile -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.