【问题标题】:Cleaning up data after a selenium test硒测试后清理数据
【发布时间】:2009-03-19 16:25:48
【问题描述】:

我正在为内部网络应用程序设置一些 Selenium 测试,并寻求有关测试“最佳实践”的建议。其中一项测试将通过 UI 添加一些无法通过 UI 删除的数据(例如,您可以通过 Web 应用程序添加记录,但删除需要在内部联系某人以在数据库级别将其删除)。在 Selenium 测试运行后,您通常如何清理数据?

有问题的应用程序是用 PHP 编写的,我使用 PHP 进行测试(使用 Selenium RC 和 SimpleTest),但我对其他工具等持开放态度,因为这只是一个广泛的最佳实践问题。正在测试的应用程序在我们的开发环境中,所以我并不特别担心测试中的数据会被带走。

一些想法:

  1. 在 Selenium 测试中手动连接数据库以清理数据
  2. 使用DBUnit 之类的东西来管理这个?
  3. 只需添加数据,无需担心清理数据(也称为惰性方法)

谢谢!

编辑:似乎大多数想法都围绕着同一个结论:处理一组已知数据并在测试完成后恢复。这个机制可能会因语言、数据量等而有所不同,但这看起来应该可以满足我的需求。

【问题讨论】:

    标签: unit-testing selenium


    【解决方案1】:

    我将 Selenium 与 Rails 应用程序一起使用,并使用夹具机制从测试数据库加载和卸载数据。它类似于 DbUnit 方法,但由于数据量大,我不会在测试之间卸载和重新加载。 (不过这是something I'm working on。)

    【讨论】:

      【解决方案2】:

      我们有一个用于数据库恢复例程的 Web 前端。我们的测试要做的第一件事就是恢复一个“众所周知的”起点。

      【讨论】:

      • 这确实阻止了测试套件为 CI/CD 工作流程自动化。
      【解决方案3】:

      将 web 应用程序指向一个不同的数据库实例,当您完成测试后 可以 擦除该实例。然后,如果您需要调试,您将在测试运行后检查数据库,完成后您可以删除所有表。如果您需要种子数据,您可以在测试之前导出当前数据库并将其恢复到新实例中。

      【讨论】:

        【解决方案4】:

        避免懒惰的方法。这不好,最终会让你失望。请参阅我之前在 separate StackOverflow question 中对此主题的回复。

        【讨论】:

          【解决方案5】:

          同意这里的其他答案。我已经将 Selenium 和 DBUnit 测试连接到我从事的过去 3 个项目中。在第一个项目中,我们尝试了惰性方法,但可以预见的是它陷入了困境,所以我们使用了 DBUnit,我没有回头。

          我知道您使用的是 PHP,因此请将 DBUnit/JUnit 翻译成您的 PHP 等价物。

          几点:

          • 使用尽可能少的数据。和 许多硒测试正在运行,你想要 DBUnit 加载速度与 可能的。所以尽量减少 您正在加载的数据量。
          • 仅加载更改的数据。经常 你可以跳过永远不会的表格 由网络应用程序更改。参考数据 表等。然而你可能 想要创建一个单独的 DBUnit xml 文件/数据库备份以加载此数据 万一你不小心弄丢了。
          • 让 JUnit selenium 测试选择 他们是否需要重新加载。一些 Selenium 测试不会改变任何 数据,所以没有必要重新加载 他们运行后的数据库。在我的每个硒测试中,我 覆盖/实现一个方法以返回所需的 DBUnit 行为。

            @覆盖 受保护的 DBUnitRunConfig getDBUnitRunConfig() {

            return DBUnitRunConfig.RUN_ONCE_FOR_THIS_TEST_CASE;
            

            }

          (无法正确格式化 sn-p。)DBUnitRunConfig 是:

          public enum DBUnitRunConfig {
              NONE, 
              RUN_IF_NOT_YET_RUN_IN_ANY_TEST_CASE, 
              RUN_ONCE_FOR_THIS_TEST_CASE, 
              RUN_FOR_EACH_TEST_IN_TEST_CASE
          };
          

          这减少了通过测试所需的时间。然后,启用 Selenium 的超类(或帮助类)可以为给定的测试运行或不运行 DBUnit。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多