Ruby on rails 固定装置、硒元素和轨道(哦,天哪?)
您在Rails应用程序上使用Selenium测试时使用了哪些数据?您是否从设备加载?是否使用现有的开发数据库?是否使用单独的(非固定装置)db 我在考虑我的选择。我有一个带有大型Selenium测试套件的Rails应用程序,该测试套件运行在Selenium网格的修改版本上。目前,该过程的一部分是在测试套件运行之前加载一组大型装置。这是大量的数据。其中大部分是报告从生产数据库导出的信息。最初设置时,我将数据从Oracle导出到yaml 现在一些报告表中的模式发生了变化,所以我当然必须重新生成fixture数据。文件太多了,手工编辑是不值得的。但是,对于每一个小小的模式更改都必须重新生成,这似乎是低效的——更不用说这是需要记住的另一个步骤了。有更好的办法吗 编辑:我最初打算在每次测试之前加载夹具,并在每次测试之后卸载它们,就像常规Rails测试一样。但由于此报告数据,加载设备大约需要15分钟。有200多个测试,套件每12小时运行一次。我不能弯曲时空船长 编辑2:我也同意拥有这么多固定装置是一种难闻的气味。不过,我不知道如何缩减,因为这些报告聚合了大量数据,而selenium测试的大部分价值在于它们测试了这些报告 即使它只是一小部分数据,但是……它仍然是另一组与模式更改保持协调的数据。(我们有一个单独的、较小的单元、功能和[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
这让我回到了我最初的问题——除了手工操作,或者每次都记得重新生成它们之外,还有其他选择吗 我目前正在进行一个拥有大量Selenium测试套件的项目——实际上,一个Selenium网格是为其编写的——我们的测试使用少量参考数据(尽管我们不使用Rails YAML装置)和对象工厂来获取特定测试所需的一次性数据 或者,在我参与的许多ThoughtWorks Rails项目中,我们编写了签入脚本,其中包含了许多预提交挂钩——例如,在允许提交之前运行测试。有一件事你可能要考虑的是编写(或定制)一个类似的签入脚本,它将检查模式更改并根据需要重新加载引用数据。
例如,请参阅Github上的Paul Gross。如果可以的话,最好的办法是建立一个系统,其中每个Selenium测试都会获得自己的数据状态(即:删除并重新创建DB表,重新插入引导数据,并清除缓存)。这说起来容易做起来难,通常只有在项目从一开始就计划好的情况下才可能做到 下一个最好的方法是为每个测试套件/运行提供一致的DB状态。这不太好,因为现在有些测试很有可能依赖于以前运行的测试的成功,这使得识别真正的失败和错误的否定更加困难 IMO,最坏的情况是使用静态数据库,其中每个测试运行都会改变日期。这几乎总是导致问题,通常是一种“项目气味”。以“正确的方式”(同样,IMO)进行操作的关键是对任何状态/模式更改保持警惕,并将其作为自动化测试/构建过程的一部分进行捕获 Rails在迁移方面已经做得很好了,所以好好利用它们吧!在不了解您的情况的情况下,我通常会质疑是否需要针对完整数据库的快照运行Selenium测试。大多数数据库可以(或应该)被提取到小于1MB的容量,以进行自动化测试,从而使自动化模式迁移和数据重置更加高效
我唯一一次看到针对Selenium测试的大规模DBs的“有效”理由是,DB本身包含大量“逻辑数据”,其中的数据会影响应用程序流(想想:数据驱动的UI)。我想你在这里问了两个相互交织的问题,如果我要将其分解:
- 您希望快速地将测试数据输入和输出数据库,而fixture并没有为您这样做
- 您已经被模式更改烧坏了,您希望确保无论您做什么都不需要八次迭代,主题是“摆弄测试数据……仍然”: