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.