Rspec、Cucumber:最佳速度数据库清理策略

2024-03-27

我想提高测试速度。

  1. 我应该使用use_transactional_fixtures或与database_cleaner gem?
  2. 哪种database_cleaner策略是最好的?我注意到,从迁移后:truncation to :transaction我的 800 多个示例的运行速度大约提高了 4 倍!
  3. 我应该关闭吗use_transactional_fixtures当我使用database_cleaner时:transaction?
  4. 确实,rack_test 的最佳策略是:transaction?
  5. 即时改变策略的最佳实践是什么:transaction to :truncation当使用硒或阿克法洛斯 https://github.com/bernerdschaefer/akephalos?

附: Mysql、Rails 3、Rspec2、黄瓜

附言我知道关于spork https://github.com/timcharper/spork and 并行测试 https://github.com/grosser/parallel_tests并使用它们。但它们是题外话。例如,Spork 在整个套件运行中节省了大约 15-20 秒,但是从:transaction to :truncation运行时间从 3.5 分钟大幅增加到 13.5 分钟(相差 10 分钟)。


使用事务装置会更快,因为 DBMS 不会提交更改(因此不会发生大量 IO 来重置测试之间的数据库),但正如您所知,这并不总是有效。

我们在测试环境中使用 SQLite 内存数据库取得了一些成功,因此测试运行速度非常快,同时关闭了事务固定装置。此选项也适用于 MySQL(使用 :options 设置“ENGINE=MEMORY”),但我个人从未这样做过,如果您搜索,您会发现一些有关涉及警告的线程。也许值得一瞧。不过,根据您的测试方法,使用不同的数据库引擎可能是不可接受的。

我建议您启用事务装置并使用数据库清理器 https://github.com/bmabey/database_cleanergem 有选择地禁用每个示例组的事务装置。我不能说我已经尝试过这个,但由于您没有任何答案,我认为任何事情都可能对您有所帮助。

before(:all) do
  DatabaseCleaner.strategy = :transaction
  DatabaseCleaner.clean_with(:truncation)
end

before(:each) do
  DatabaseCleaner.start
end

after(:each) do
  DatabaseCleaner.clean
end

如果是我,我会将其分解为一个助手,并将其称为每个需要关闭事务装置的示例组中的单行宏。

看来确实应该有更好的方法,不过……祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rspec、Cucumber:最佳速度数据库清理策略 的相关文章

  • Rails 3 具有 12 小时格式的时间选择表单助手?

    Rails 3 有用户友好的 time select 吗 默认的 time select 表单助手为您提供小时 00 23 分钟 00 59 和可选的秒 00 59 对于我们这些非军事时间的人来说 0 23 小时的下拉列表非常令人沮丧 用户
  • 如何在活动脚手架导轨 3 中添加新链接

    我需要在我的出租车列表页面中添加一个新链接 地图 我使用的是 active scaffold 和 Rails 3 2 1 我当前的页面如下所示 我需要在每条记录中显示类似于编辑 删除 显示的链接 地图 在我的数据库中 我有字段名称 纬度 经
  • 数据库查询的内部实现

    根据我的经验 我使用过很多查询 例如select order by wheremysql sql server oracle 等中的子句等 有那么一刻我想 1 内部是如何编写来实现上述查询的 2 他们使用哪种语言 3 那是编程语言吗 如果是
  • 如何将 Headless chrome 与水豚和硒一起使用

    Chrome版本 59 0 3071 104 使用Cucumber Capybara Selenium实现Headless Chrome的自动化测试 功能 支持 env rb require rubygems require capybar
  • Rails 3.1 与 3.0 AJAX 语法差异。 jQuery 中的等效语句?

    完成 使用 Rails 进行敏捷 Web 开发 第 4 版并点击开始 AJAX 部分 第 11 章迭代 F2 在示例代码中 使用 Rails 3 0 的书籍建议创建 app views line items create js rjs 文件
  • 实体框架:如何检测数据库的外部更改

    我有一个存储过程可以更改数据库中的大量数据 该存储过程是从同时使用 EF 进行数据操作的应用程序调用的 因此 我单击一个按钮 存储过程在数据库中运行 数据发生更改 并且 EF 向用户显示旧数据 有没有办法强制 DbContext 或 Obj
  • Active Admin:如何设置页面标题?

    这看起来应该相对简单 但我在寻找答案时遇到了一些麻烦 如何在 ActiveAdmin 中设置页面标题 合并答案并添加一点 这大部分都在维基百科上的这个页面 https github com gregbell active admin wik
  • 使用 PostgreSQL 查找并删除重复行

    我们有一个包含以下列的照片表 id merchant id url 该表包含组合的重复值merchant id url 因此 一行可能会出现多次 234 some merchant http www some image url com a
  • Rails 4 中的“find_all_by_id”相当于什么

    我有一个 id 数组 我想使用活动记录查询从数据库中查找它们各自的记录 例如 ids 2 3 1 现在 对于我来说 要查找 id 是数组中的其中之一的特定模型的所有记录 在较低版本的 Rails 中 我想我可以执行以下操作 Model fi
  • 翻译数据库内文本的最佳方法是什么

    我们这里有问题 我们需要将网站翻译成多种语言 我们已经使用 gettext 来翻译静态内容 但我们必须将一些文本内容翻译成多种语言 ui不是问题 我们找到了两种翻译文本的方法 1 在我们的文本输入中使用 JSON 为什么这个解决方案不好 每
  • 如何在查询中获取 MySQL 状态

    是否可以在 MySQL 查询中使用服务器状态变量 我可以从 显示状态 中看到各种指标 但如何计算派生值 例如查询缓存命中率 show global status like Qcache inserts show global status
  • 了解 Collection.isEmpty() 和 Collection.size() == 0 之间的区别? [复制]

    这个问题在这里已经有答案了 我读过很多关于两者之间差异的文章isEmpty and size gt 0 用于检查collection是否为空并发现isEmpty 表现超过size 但我无法轻易理解为什么性能isEmpty 即使 isEmpt
  • 如何提高非持久 CGI 进程中的 Moose 性能?

    Moose http search cpan org dist Moose 是一个很棒的对象框架 问题在于 连同它的依赖项一起 它是very大的 我们的分析表明 在我们的平台上 仅加载 Moose 就会在非持久性 CGI 应用程序脚本上产生
  • 格式化时间戳

    如何将 Rails 时间戳格式化为更易于理解的格式 如果我只是打印出来created at or updated at在我看来是这样的 然后我会得到 2009 03 27 23 53 38 世界标准时间 The strftime http
  • 增加 C++ 程序 CPU 使用率

    我有一个用 C 编写的程序 每秒运行多个 for 循环 而不使用任何会使其因任何原因等待的东西 它始终使用 2 10 的 CPU 有没有什么方法可以强制它使用更多的CPU并进行更多的计算而不使程序变得更复杂 此外 我在 Windows 计算
  • 黄瓜使用标签自动重新运行失败的场景?

    在我们的构建中 某些场景会由于我们无法控制的原因或需要很长时间才能正确调试而失败 诸如异步javascript之类的东西 无论如何 重点是有时它们工作 有时不工作 所以我认为最好向场景添加一个标签 例如 rerun on failure 或
  • 如何在中等规模的 Rails 应用程序中组织控制器?

    我正在开发一个具有相当多相关模型的应用程序 并且想听听一些关于如何最好地组织控制器的意见 以下是我一直在考虑的一些选择 1 为控制器命名空间 例如 有一个controllers admin 目录和一个controllers public 目
  • 提升 ggplot2 性能

    The ggplot2软件包无疑是我使用过的最好的绘图系统 只是对于较大的数据集 约 50k 点 来说性能并不是很好 我正在考虑通过 Shiny 提供网络分析 使用ggplot2作为绘图后端 但我对其性能并不满意 尤其是与基础图形相比 我的
  • 帮助加入 Rails 3

    我有以下型号 class Event lt ActiveRecord Base has many action items end class ActionItem lt ActiveRecord Base belongs to event
  • Hibernate Query在系统中运行缓慢,但直接运行时速度很快

    我遇到了与本周播客中类似的问题 我们有一个使用 Hibernate 和 Sql Server 2005 的 Java 应用程序 Hibernate 正在为我们生成一个查询 该查询需要近 20 分钟才能完成 如果我们使用 show sql 进

随机推荐

  • 任何阻止 WebView 内置滚动的方法

    我正在开发一个必须使用网络视图的应用程序 我的问题是我们可以停止 WEBVIEW 内置的滚动功能吗 我已经尝试过这样做 在 onScrollChanged super scroll 0 0 但这对我没有帮助 我正在寻找类似我们可以使用网络视
  • 如何停止 Azure CDN 缓存 index.html

    我正在使用 Azure CDN 托管我正在构建的静态网站 这很棒 除了当我更新网络应用程序时旧页面被缓存并仍然显示这一事实之外 我在规则引擎中添加了以下缓存规则 使其每 60 秒刷新一次 但这没有任何作用 我仍然得到旧内容 获取新内容的唯一
  • 帮助集中动态创建的输入

    我的代码是这样的 在jsfiddle http jsfiddle net KH7pZ 1 var inp
  • 删除一列的重复单元格:html

    我要按照这个做同样的事情 table border 1 tr td test1 td td test2 td td test3 td tr tr td test4 td td test2 td td test5 td tr tr td te
  • 无法在 mac os yosemite 中通过 brew 链接 PCRE

    当我使用安装守望者时brew install watchman 它得到了这个Error You must brew link pcre before watchman can be installed 所以我尝试brew link pcre
  • 一种阻止移动浏览器下载和显示图像的方法

    有没有一种简单的方法来阻止浏览器下载和显示图像 最好是通过一些魔法样式标签或javascript 问题是 我想稍微调整一下公司的网站 以便通过移动设备更方便使用 该公司是一家游戏公司 其主页上有大约 5MB 的图像 而且这些图像是不能动的
  • Google Apps 脚本中的 MailApp.sendEmail() 不发送电子邮件

    我们为客户建立了 Google G Suite 在过去的几周里 我们发现 Google Apps 脚本没有按预期处理 MailApp sendEmail 它只发生在新的 G Suite 帐户中 并且现有帐户中的代码与预期的功能完全相同 fu
  • 将数据导出到 Excel 在数据表中不起作用

    在 head 之间添加此行后 导出数据和 TableTools 不适用于我
  • 检查对象的类型是否继承自特定类

    在C 中 如何检查对象的类型是否继承自特定类 class Form class Moveable public Form class Animatable public Form class Character public Moveabl
  • 从活动中调用 JavaScript 函数?

    如何使用 Activity 中的按钮调用加载到 webView 中的 HTML 文档中的函数 即 一个 ImageButton 称为 bookBtn 位于 Activity 的标题栏中 当按下 点击它时 我需要它在 webView DOM
  • 从 Set 中检索“规范值”,其中 T 具有自定义 equals()

    我有一个class Foo这会覆盖equals and hashCode 适当地 我想也想使用HashSet
  • 为什么当我追加子项时我的输入值会被清除?

    当我在 a 中附加元素时遇到问题div我输入的所有值 包括选定的选项 都被清除 如下所示 正如您所看到的 当我单击按钮 A adir tecla 时 文本框中的文本和所选选项 Shift 将返回到默认选项 Flechas de movimi
  • Outlook 中的文本不使用行高

    我正在使用 Html 创建电子邮件 并且偶然发现 Outlook 2010 存在问题 这是我的代码 td width 514 height 460 valign top td
  • Facebook Connect iPhone 自定义发布流

    我刚刚下载了 iOS 版 Facebook SDK 因为我需要能够将自定义流发布到用户的 Facebook feed 示例应用程序有一个名为publishStream id sender的方法 该方法似乎为 发布流 对话框设置自定义描述 但
  • counter_cache 列返回 0 的 Rspec 测试

    几天来 我一直在努力弄清楚什么是应该很容易做的事情 然而 我对 Rails 和 ruby 的世界仍然很陌生 我只是无法解决这个问题 p 无论如何 我遇到的问题是我的模型中有许多 counter cache 列 这些列在手动测试时都工作得很好
  • 防止使用 PHP CURL 的远程脚本登录网站

    有哪些方法可用于保护登录页面不被远程 PHP 脚本使用 CURL 登录 检查引荐来源网址和用户代理将不起作用 因为它们可以使用 CURL 设置 理想的解决方案是在不使用验证码的情况下解决这个问题 这就是这个问题的重点 试图弄清楚这是否可能
  • 导入的样式不会应用于组件

    我想创建单独的文件来存储 IE 9 11 的样式 为此 我创建并导入了文件InternetExplorer scss进入 主文件styles scss import scss InternetExplorer scss The Intern
  • 错误:存在部署错误

    当我尝试运行任何示例应用程序或新应用程序时 它显示此错误 有人可以帮忙吗 该错误告诉您尚未选择设备 运行应用程序之前请选择有效的设备 您需要选择一个物理手机 或 Android 模拟器 来部署应用程序 Ref 在设备上调试 https de
  • 及时编译 - 存储与始终执行[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 JVM 不缓存 JIT 编译的代码 https stackoverflow com questions 1992486 why doesnt the jvm cache jit compile
  • Rspec、Cucumber:最佳速度数据库清理策略

    我想提高测试速度 我应该使用use transactional fixtures或与database cleaner gem 哪种database cleaner策略是最好的 我注意到 从迁移后 truncation to transact