【问题标题】:Test Speed: ActiveRecord use_transactional_fixtures vs. DatabaseCleaner.strategy = :transaction测试速度:ActiveRecord use_transactional_fixtures vs. DatabaseCleaner.strategy = :transaction
【发布时间】:2012-11-05 14:46:55
【问题描述】:

从源(database_cleaner,active_record)来看,看起来应该同样快。但是有人声称使用 database_cleaner 的事务策略会减慢控制器和模型规范 (for example)。我手头没有用于基准测试的大型测试套件。有人有任何见解或比较过两者吗?

【问题讨论】:

    标签: ruby-on-rails ruby rspec benchmarking rspec-rails


    【解决方案1】:

    我花了一点时间在一个广泛使用 ActiveRecord 固定装置的中型代码库上比较了两者。当我将它切换为使用 DatabaseCleaner 而不是 use_transactional_fixtures 时,模型规范开始花费大约两倍的时间。

    在进行与您相同的比较后,我意识到use_transactional_fixtures 控制了两件事:

    1. 每个规范是否包含在事务中
    2. ActiveRecord 在哪里加载夹具数据
      • use_transactional_fixtures为真时,夹具数据在第一次测试之前加载一次
      • 如果为 false,则在每个规范之前加载夹具数据

    DatabaseCleaner 的事务策略可以替代(1)。但缺点是您的套件会重复加载相同的夹具数据。

    因此,如果您不使用 AR 夹具(或仅使用一对),use_transactional_fixtures 和 DatabaseCleaner 的事务策略将具有相似的性能。但是如果你使用很多 AR 设备,关闭 use_transactional_fixtures 会对性能产生很大影响。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多