【问题标题】:Setting up a test database in Django在 Django 中设置测试数据库
【发布时间】:2012-12-14 18:26:27
【问题描述】:

我想创建集成测试,以便在我的数据库中创建单个模型的 1000 条记录。

对于我的 settings.py 文件,我已指定在运行测试时使用相同的数据库 default

if 'test' in sys.argv or 'test_coverage' in sys.argv:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'TableName',                      # Or path to database file if using sqlite3.
            'USER': 'postgres',                      # Not used with sqlite3.
            'PASSWORD': 'password',                  # Not used with sqlite3.
            'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
            'PORT': '5432',                      # Set to empty string for default. Not used with sqlite3.
        }
    }

当我运行命令 python manage.py test <app> 时,我收到一条错误消息,指出我有两个会话正在运行。

 Got an error creating the test database: source database "template1" is being accessed by other users
DETAIL:  There are 1 other session(s) using the database.

【问题讨论】:

    标签: postgresql session django-testing


    【解决方案1】:

    确保在运行测试之前禁用python manage.py runserver 或任何其他访问您的 postgresql 的进程(例如 pgadmin3 或 phppgadmin)。

    换句话说,请确保您已为您的应用程序终止正在运行的 postgresql 连接

    您还可以通过

    确定应用程序与您的 postgresql 数据库建立的开放连接是什么
    psql -U postgres
    
    postgres=# SELECT * FROM pg_stat_activity;
    

    如果你想具体一点,你可以这样做:-

    postgres=# SELECT * FROM pg_stat_activity where datname = 'TaleeboBixin';
    

    【讨论】:

    • 数据库测试被创建和销毁,如果我创建记录,是否意味着测试完成后它们将被删除?
    • 是的,没错。将为您创建一个名为 test_TaleeboBixin 的新数据库(因为您的实际数据库名为 TaleeboBixin)。测试运行完成后,该数据库将被删除。
    • 我真的很想创建不会消失的模型测试,如果这个测试 dB 消失了,我有什么选择?
    • 是的,您可以编写一个自定义测试运行程序来保存您的测试模型。这是一个例子 - packages.python.org/django-test-utils/keep_database_runner.html
    猜你喜欢
    • 2018-07-07
    • 2014-05-28
    • 1970-01-01
    • 2016-07-24
    • 2017-10-20
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    相关资源
    最近更新 更多