6

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

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

一些想法:

  1. Selenium测试中手动连接数据库清理数据
  2. 使用类似DBUnit的东西来管理这个?
  3. 只需添加数据,不用担心清理它(也就是惰性方法)

谢谢!

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

4

5 回答 5

4

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

于 2009-03-19T16:40:55.243 回答
2

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

于 2009-03-19T16:30:19.980 回答
0

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

于 2009-03-19T16:58:51.470 回答
0

避免懒惰的方法。这不好,最终会让你失望。在这个单独的 StackOverflow 问题中查看我之前对此主题的回复。

于 2009-03-20T01:23:38.140 回答
0

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

我知道您正在使用 PHP,所以请将 DBUnit/JUnit 翻译成您的 PHP 等价物。

几点:

  • 使用尽可能少的数据。随着许多 selenium 测试的运行,您希望 DBUnit 加载尽可能快。因此,请尽量减少您正在加载的数据量。
  • 仅加载更改的数据。通常,您可以跳过 Web 应用程序从未更改过的表格。参考数据表等。但是,您可能希望创建一个单独的 DBUnit xml 文件/数据库备份来加载此数据,以防您意外丢失它。
  • 让 JUnit selenium 测试选择是否需要重新加载。一些 Selenium 测试不会更改任何数据,因此在运行后重新加载数据库是没有意义的。在我的每个 selenium 测试中,我重写/实现了一个方法来返回所需的 DBUnit 行为。

    @Override 受保护的 DBUnitRunConfig getDBUnitRunConfig() {

    return DBUnitRunConfig.RUN_ONCE_FOR_THIS_TEST_CASE;
    

    }

(无法正确格式化该代码段。) 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。

于 2009-03-24T21:41:58.503 回答