【问题标题】:What are your best practices for working with test data in Django?在 Django 中处理测试数据的最佳实践是什么?
【发布时间】:2011-09-30 16:57:12
【问题描述】:

我目前为每个应用程序使用一个固定装置文件,但随着项目的增长,测试花费的时间太长,我认为为每个测试类加载的(现在很大的)固定装置有问题。

由于担心重复和维护,我避免使用许多较小的固定装置,但我知道这是不可避免的。

不过,在我走这条路之前,我想我会问其他人如何使用固定装置来测试他们的应用程序/项目。

【问题讨论】:

    标签: python django testing tdd


    【解决方案1】:

    是的,您在使用大量固定装置时遇到了问题。随着测试套件的增长,不断的反序列化/加载确实会增加。我建议编写实用程序函数来根据需要创建数据,而不是依赖固定装置。例如,您可能有一个创建新 auth.User 的函数,例如:

    def create_user(data=None):
        data = data or {}
        defaults = {
            'username': get_random_string(),
            'email': get_random_email(),
            'password': get_random_string()
        }
        defaults.update(data)
        return User.objects.create_user(**defaults)
    

    编写一个生成随机字符串/电子邮件的函数留给读者作为练习:)

    【讨论】:

      【解决方案2】:

      确保您使用 sqlite 进行测试。与其他数据库引擎相比,速度有很大差异。

      【讨论】:

      • 速度更快,因为它不会验证您输入的任何数据。
      • @Mark,您关于数据验证的观点在大多数情况下与使用 django 无关。使用 sqlite 的测试更快 tremendously 因为 sqlite 在内存中工作。可以配置 django 设置,以便 mysql 或 postrges 使用内存表而不是常规表,如果这样做,则数据库之间没有显着差异。
      • 编写测试的目标不是拥有一个快速的测试套件;这是为了确保您的代码在您将其移至不应使用 Sqlite 的生产环境时执行应有的操作。在 Django 和随后的测试用例中编写代码是微不足道的,这些测试用例将通过 Sqlite 并在真实数据库上失败。使用 Sqlite 进行测试对你没有任何好处。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2015-07-20
      • 2012-07-17
      • 2019-07-12
      • 2011-02-15
      • 1970-01-01
      相关资源
      最近更新 更多