Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django测试在添加一个测试用例后未能安装夹具_Python_Django_Postgresql_Fixtures - Fatal编程技术网

Python Django测试在添加一个测试用例后未能安装夹具

Python Django测试在添加一个测试用例后未能安装夹具,python,django,postgresql,fixtures,Python,Django,Postgresql,Fixtures,我几乎开始怀疑Django应用程序的测试用例数量是否有限制,因此我需要您的帮助来找出如何避免这个问题,并在我的应用程序中对所有测试用例进行功能测试 我的Django v1.10.7应用程序有4个fixture测试用例,运行良好。一旦我添加了第五个带有fixture的测试用例,运行测试 连同 python3./manage.py测试myapp 开始导致一个随机的旧测试用例失败: ERROR: setUpClass (myapp.tests.RandomOldTestCase) ----------

我几乎开始怀疑Django应用程序的测试用例数量是否有限制,因此我需要您的帮助来找出如何避免这个问题,并在我的应用程序中对所有测试用例进行功能测试

我的Django v1.10.7应用程序有4个fixture测试用例,运行良好。一旦我添加了第五个带有fixture的测试用例,运行测试 连同

python3./manage.py测试myapp

开始导致一个随机的旧测试用例失败:

ERROR: setUpClass (myapp.tests.RandomOldTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/django/db/backends/base/base.py", line 206, in _cursor
    return self.create_cursor()
  File "/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py", line 211, in create_cursor
    cursor = self.connection.cursor()
psycopg2.InterfaceError: connection already closed

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/django/test/testcases.py", line 1019, in setUpClass
    'database': db_name,
  File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 130, in call_command
    return command.execute(*args, **defaults)
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 345, in execute
    output = self.handle(*args, **options)
  File "/usr/lib/python3/dist-packages/django/core/management/commands/loaddata.py", line 64, in handle
    self.loaddata(fixture_labels)
  File "/usr/lib/python3/dist-packages/django/core/management/commands/loaddata.py", line 104, in loaddata
    self.load_label(fixture_label)
  File "/usr/lib/python3/dist-packages/django/core/management/commands/loaddata.py", line 167, in load_label
    obj.save(using=self.using)
  File "/usr/lib/python3/dist-packages/django/core/serializers/base.py", line 201, in save
    models.Model.save_base(self.object, using=using, raw=True, **kwargs)
  File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 824, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 889, in _save_table
    forced_update)
  File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 939, in _do_update
    return filtered._update(values) > 0
  File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 654, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
  File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py", line 1148, in execute_sql
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
  File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py", line 833, in execute_sql
    cursor = self.connection.cursor()
  File "/usr/lib/python3/dist-packages/django/db/backends/base/base.py", line 233, in cursor
    cursor = self.make_cursor(self._cursor())
  File "/usr/lib/python3/dist-packages/django/db/backends/base/base.py", line 206, in _cursor
    return self.create_cursor()
  File "/usr/lib/python3/dist-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/usr/lib/python3/dist-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/django/db/backends/base/base.py", line 206, in _cursor
    return self.create_cursor()
  File "/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py", line 211, in create_cursor
    cursor = self.connection.cursor()
django.db.utils.InterfaceError: Problem installing fixture '/home/lynoure/PycharmProjects/usertools2/useraccounts/fixtures/test-fixtures.json': connection already closed
新测试用例是什么似乎无关紧要,即使我用新名称复制了一个预先存在的测试,这种情况也会发生


如果重要的话,这是在Debian Stable上,postgresql的版本是9.6+181,python3-psycopg2是2.6.2-1。

作为一种解决方法,可以标记一些测试用例,然后只运行不包含标记的测试:

from django.test import tag

@tag('trouble')
class TroubleTestCase(TestCase):
...
而要运行:

python3 ./manage.py test myapp --exclude-tag=trouble
之后必须单独运行这些测试:

python3 ./manage.py test myapp --tag=trouble

结果是如果你有两个

super().tearDownClass()

您的代码中缺少,这就是您得到的症状。因此,如果这种情况发生在您身上,请检查您的测试用例是否有调用父类的tearDownClass。

似乎很想通过使用TransactionTestCase来“解决”这个问题,但是没有加载fixture,所以有些东西仍然会被破坏。serialized_rollback=True似乎没有任何区别parallel=1也没有区别