无法加载Django测试类中的对象

无法加载Django测试类中的对象,django,testing,Django,Testing,在测试类中,我希望获得给定类型的所有对象;这总是给出一个空集: from Dictionnaire.models import Entree class Test(TestCase): def setUp(self): ... Q=Entree.objects.all() print(Q.count()) <------always get 0. 来自Dictionnaire.models导入中心 类测试(TestCase): def设置(自): ..

在测试类中,我希望获得给定类型的所有对象;这总是给出一个空集:

from Dictionnaire.models import Entree

class Test(TestCase):
    def setUp(self):
    ...
    Q=Entree.objects.all()
    print(Q.count())  <------always get 0.
来自Dictionnaire.models导入中心
类测试(TestCase):
def设置(自):
...
Q=entre.objects.all()

print(Q.count())运行测试的想法是每次运行测试时都有一个可复制的情况。因此,
TestCase
将在每次初始化时创建一个新的空数据库,首先运行所有迁移。通过这种方式,您可以确保每次运行测试时,您都会遇到相同的情况

因此,
TestCase
不使用开发数据库,也不使用开发服务器(
runserver
)。它完全在自己的“世界”中运行


如果要确保在运行测试时数据库中有一些数据,请重写class方法,这比在
setUp()

中为每个测试执行该方法要快。您可以将数据库转储到夹具中,然后从测试数据库加载该数据库:

fixture是Django知道如何导入的数据集合 数据库。创建夹具的最简单方法是 您已经获得了一些数据,可以使用
manage.py dumpdata
命令

fixture可以写为JSON、XML或YAML(安装了PyYAML) 文件

加载数据很简单:只需调用
manage.py loaddata
, 其中是已创建的装置文件的名称

然后从
test.py
中的
SetUp()

from django.core.management import call_command
call_command("loaddata", "' + 'fixturefile.json' + '",
verbosity=0)
但是,为了使测试数据库与生产数据库保持最新(我不建议这样),您必须设置cron作业或其他内容

资料来源:


您需要首先在数据库中创建对象:每次都有一个新的空数据库运行
TestCase
。我的问题是我想在真实数据库中的对象上进行测试;我有一个集合(entre是脚本),对于这些对象中的每一个,我计算一个URL,我想测试这个URL是否正常,是否可以实现。似乎我无法在Django的测试框架中直接实现这一点?您不能在测试开始时通过加载带有所需数据的夹具来测试这一点?您可以从真实数据库中
转储数据
,并将其用作固定装置。如果您想针对远程服务器进行测试(例如,如果您要测试预生产服务器),请使用不同的框架,例如selenium。不要在您的生产环境上运行任何测试,这非常危险!是的,硒看起来很有趣。谢谢如果您喜欢,您可以投票并批准作为答案:)