Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 testcase with--keepdb未在测试之间重置对象ID_Python_Django_Testing - Fatal编程技术网

Python django testcase with--keepdb未在测试之间重置对象ID

Python django testcase with--keepdb未在测试之间重置对象ID,python,django,testing,Python,Django,Testing,最近,我将使用Python2.7和django 1.11制作的django应用程序更新为Python3和django 3.1 我有几个使用django.test.TestCase的测试用例。其中一些测试假设数据库在测试执行之间会完全重置,除其他外,预期模型的最后一个id也会重置,例如,如果我在测试中创建一个对象并将其保存到数据库中,该对象将始终从1开始接收相同的id 这在Django 1.11上的行为与此完全相同,并且我能够使用--keepdb标志来避免每次重新创建数据库 然而,在升级到Pyth

最近,我将使用Python2.7和django 1.11制作的django应用程序更新为Python3和django 3.1

我有几个使用django.test.TestCase的测试用例。其中一些测试假设数据库在测试执行之间会完全重置,除其他外,预期模型的最后一个id也会重置,例如,如果我在测试中创建一个对象并将其保存到数据库中,该对象将始终从1开始接收相同的id

这在Django 1.11上的行为与此完全相同,并且我能够使用--keepdb标志来避免每次重新创建数据库

然而,在升级到Python3和Django3.1之后,我注意到情况不再如此。我注意到,在测试执行后,所有对象都会从数据库中删除,但在下一次测试执行时,新对象是从上次使用的pk开始创建的,因此我无法再考虑创建的对象将具有可预测的pk。这导致了一个非常恼人的行为,即如果我在重新创建db之后运行测试,测试将通过,但是如果我再次运行测试,保持db,它将不会通过,因为pks将不同

如果在运行测试时删除--keepdb标志,则pks都会重置,但这会使测试执行速度大大降低,因为创建数据库结构需要几分钟的时间


是否有在每次测试执行时重置pks的选项?Django在1.11之后的版本上的这种行为实际上有变化吗?

我在StackOverflow上找到了我的问题的答案:

建议如下:

reset_sequences = True
在测试课上

不过,屏幕上有一个警告:

Unless you are explicitly testing primary keys sequence numbers, it is
recommended that you do not hard code primary key values in tests.
而且:

Using reset_sequences = True will slow down the test, since the primary key
reset is an relatively expensive database operation.