用Django_nose和Djangodynamicfixtu优化Django模型的设置和拆卸

2024-05-08 23:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

鉴于我的模型如下:

class Author(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ManyToManyField(Author) 

我使用django-dynamic-fixture为测试轻松生成模型夹具。我还使用了django_nose,它可以帮助我很好地运行和管理测试。 安装测试运行程序设置.py把所有可安装的东西归档并放好。在

要生成如上所述的模型,测试应该

^{pr2}$

如果我写信

class AuthorModelTest(TestCase):

   def test_some_stuff()             

我需要一些固定装置值。 以下是我的疑问:

我如何保持我的夹具一代干燥。这意味着不在每个函数中从G创建book和author fixture?在

django_nose有助于优化设置和拆卸方法并提高速度,如何在这里使用它们?只不过是把django_机头快速固定试验箱*设置会自己处理吗?或者我需要使用TransactionTestCase?如何优化上述夹具和测试?在


Tags: djangoname模型modelmodelsdescriptionlengthfixture
3条回答

最新版本的Django Dynamic Fixture包含一个Django Nose plugin,以便于创建全局夹具。看看这对你有没有帮助。在

TransactionTestCase帮助您保存每个测试保存一个完整的数据库刷新,它要求您从一个未更正的数据库开始,您可以使用任何fixture生成器生成它。TransactionTestCase然而,django nose会帮助您优化数据库。然而,django nose还有另一个测试运行程序FastFixtureTestCase可以帮助您优化设置和拆卸。在

如前所述,您可以使用任何fixture生成,如果您想要django nose的优点,请使用FastFixtureTestCase,它将帮助您优化IO时间。在

FastFixtureTestCase用于快速夹具处理,在这种情况下它根本没有帮助。在

使用django_dynamic_fixture或factory_boy(我个人使用),并且总是只创建测试所需的尽可能小的对象,即使可能-完全忽略数据库(例如,当只测试与其他模型无关的模型方法时)是最快的方法。在

另外,如果数据库是减慢您的速度的原因,请尝试使用常规数据库进行测试。我知道sqlite在测试中应该很快,因为它是在内存中运行的,但是它仍然比普通的postgres/mysql数据库慢得多。您还可以在django nose中启用REUSE_DB选项,这将使测试的启动和关闭更快。在

相关问题 更多 >