Ruby on rails 固定装置、硒元素和轨道(哦,天哪?)

Ruby on rails 固定装置、硒元素和轨道(哦,天哪?),ruby-on-rails,ruby,selenium,fixtures,Ruby On Rails,Ruby,Selenium,Fixtures,您在Rails应用程序上使用Selenium测试时使用了哪些数据?您是否从设备加载?是否使用现有的开发数据库?是否使用单独的(非固定装置)db 我在考虑我的选择。我有一个带有大型Selenium测试套件的Rails应用程序,该测试套件运行在Selenium网格的修改版本上。目前,该过程的一部分是在测试套件运行之前加载一组大型装置。这是大量的数据。其中大部分是报告从生产数据库导出的信息。最初设置时,我将数据从Oracle导出到yaml 现在一些报告表中的模式发生了变化,所以我当然必须重新生成fix

您在Rails应用程序上使用Selenium测试时使用了哪些数据?您是否从设备加载?是否使用现有的开发数据库?是否使用单独的(非固定装置)db

我在考虑我的选择。我有一个带有大型Selenium测试套件的Rails应用程序,该测试套件运行在Selenium网格的修改版本上。目前,该过程的一部分是在测试套件运行之前加载一组大型装置。这是大量的数据。其中大部分是报告从生产数据库导出的信息。最初设置时,我将数据从Oracle导出到yaml

现在一些报告表中的模式发生了变化,所以我当然必须重新生成fixture数据。文件太多了,手工编辑是不值得的。但是,对于每一个小小的模式更改都必须重新生成,这似乎是低效的——更不用说这是需要记住的另一个步骤了。有更好的办法吗

编辑:我最初打算在每次测试之前加载夹具,并在每次测试之后卸载它们,就像常规Rails测试一样。但由于此报告数据,加载设备大约需要15分钟。有200多个测试,套件每12小时运行一次。我不能弯曲时空船长

编辑2:我也同意拥有这么多固定装置是一种难闻的气味。不过,我不知道如何缩减,因为这些报告聚合了大量数据,而selenium测试的大部分价值在于它们测试了这些报告

即使它只是一小部分数据,但是……它仍然是另一组与模式更改保持协调的数据。(我们有一个单独的、较小的单元、功能和[Rails]集成测试集。)


这让我回到了我最初的问题——除了手工操作,或者每次都记得重新生成它们之外,还有其他选择吗

我目前正在进行一个拥有大量Selenium测试套件的项目——实际上,一个Selenium网格是为其编写的——我们的测试使用少量参考数据(尽管我们不使用Rails YAML装置)和对象工厂来获取特定测试所需的一次性数据

或者,在我参与的许多ThoughtWorks Rails项目中,我们编写了签入脚本,其中包含了许多预提交挂钩——例如,在允许提交之前运行测试。有一件事你可能要考虑的是编写(或定制)一个类似的签入脚本,它将检查模式更改并根据需要重新加载引用数据。
例如,请参阅Github上的Paul Gross。

如果可以的话,最好的办法是建立一个系统,其中每个Selenium测试都会获得自己的数据状态(即:删除并重新创建DB表,重新插入引导数据,并清除缓存)。这说起来容易做起来难,通常只有在项目从一开始就计划好的情况下才可能做到

下一个最好的方法是为每个测试套件/运行提供一致的DB状态。这不太好,因为现在有些测试很有可能依赖于以前运行的测试的成功,这使得识别真正的失败和错误的否定更加困难

IMO,最坏的情况是使用静态数据库,其中每个测试运行都会改变日期。这几乎总是导致问题,通常是一种“项目气味”。以“正确的方式”(同样,IMO)进行操作的关键是对任何状态/模式更改保持警惕,并将其作为自动化测试/构建过程的一部分进行捕获

Rails在迁移方面已经做得很好了,所以好好利用它们吧!在不了解您的情况的情况下,我通常会质疑是否需要针对完整数据库的快照运行Selenium测试。大多数数据库可以(或应该)被提取到小于1MB的容量,以进行自动化测试,从而使自动化模式迁移和数据重置更加高效


我唯一一次看到针对Selenium测试的大规模DBs的“有效”理由是,DB本身包含大量“逻辑数据”,其中的数据会影响应用程序流(想想:数据驱动的UI)。

我想你在这里问了两个相互交织的问题,如果我要将其分解:

  • 您希望快速地将测试数据输入和输出数据库,而fixture并没有为您这样做
  • 您已经被模式更改烧坏了,您希望确保无论您做什么都不需要八次迭代,主题是“摆弄测试数据……仍然”:
你这里有两个选择,我已经在下面讨论过了。因为您提到了Oracle,我在这里使用的是Oracle技术,但对于其他数据库平台(例如Postgresql),情况也是如此:

  • Rake测试调用PL/SQL脚本来生成数据,这是一个可怕的坏主意,除非没有其他选择,否则不要这样做。我在一个项目上做了这项工作,该项目需要为一些基础架构测试加载数十亿行。我仍然为此生闷气
  • 将数据库转换为转储格式。要快速进行二进制转储,请查看exp/imp和数据泵实用程序。这将允许您快速安装和拆卸数据库。当然,在我参与的一个rails项目中,我们使用rake任务来扩展/导入一个数据库,该数据库在不到一分钟的时间内拥有大约30万条记录。还要检查SQLLoader,它是一个逻辑转储实用程序,因为它的逻辑转储速度较慢,并且需要使用控制脚本来帮助SQLLoader理解转储。但是,逻辑转储的好处是,您可以在其上运行转换脚本,将数据转换为最新格式。遗憾的是,就像fixture一样,所有这些工具都对模式中的更改非常敏感
  • 使用诸如或之类的插件来更好地生成数据。使用ActiveRecord设置DB仍然会受到惩罚,但这些伪对象生成器将帮助您与迁移保持密切联系,并且维护起来比固定装置少很多麻烦
  • 结合方法2和3。这里发生的事情是你做了一些测试