时,我想有一个 settings.py文件中运行的应用Django的变量测试
./manage.py runserver
在及测试
./manage.py test myapp
时将不同的表现真的是这样,我例如,可以将测试数据库更改为sqlite,例如:
if IS_TESTING:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'test_db',
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': DATABASE_NAME,
'USER': DATABASE_USER,
'PASSWORD': DATABASE_PASS,
'HOST': 'localhost',
'PORT': '5432',
}
}
我可以通过改变manage.py这样的脚本得到这个行为:
if __name__ == "__main__":
os.environ.setdefault('IS_TESTING', 'false')
print 'off'
if sys.argv[1] == 'test':
print 'on'
os.environ['IS_TESTING'] = 'true'
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "frespo.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
但我认为这仍然是不够好,因为当我运行一个IDE内部测试(PyCharm),它不会使用我的自定义manage.py文件。 Django中已经有了一个变量。你知道在哪里吗?
听起来很像http://stackoverflow.com/questions/4088253/django-how-to-detect-test-environment –
相同的解决方案确实如此。对不起,关于那个:-) –