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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to