硒测试后清理数据

时间:2009-03-19 16:25:48

标签: unit-testing selenium

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

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

一些想法:

  1. 在Selenium测试中手动连接到数据库以清理数据
  2. 使用DBUnit之类的东西来管理它?
  3. 只需添加数据,不要担心清理它(也就是懒惰的方法)
  4. 谢谢!

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

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

将webapp指向您在完成测试后可以擦除的其他数据库实例。然后,如果需要调试,您将在测试运行后检查数据库,并在完成后立即清除所有表。如果需要种子数据,可以在测试之前获取当前数据库的导出并将其恢复到新实例中。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

在这里同意其他答案。我已经将Selenium和DBUnit测试连接到过去的3个项目中。在第一个项目中,我们尝试了懒惰方法,但可以预见它会陷入堆中,因此我们使用了DBUnit并且我没有回头。

我意识到你正在使用PHP,所以请将DBUnit / JUnit翻译成你的PHP等价物。

有几点:

  • 尽可能少地使用数据。同 很多硒试验都在运行,你想要的 DBUnit的加载速度要快 可能。所以尽量减少 您正在加载的数据量。
  • 仅加载更改的数据。经常 你可以跳过从不的表 由网络应用程序更改。参考数据 表等。不过你可能会 想要创建一个单独的DBUnit xml 文件/数据库备份以加载此数据 你不小心失去了它的情况。
  • 让JUnit selenium测试选择 他们是否需要重装。一些Selenium测试不会改变任何 数据,所以没有重新加载点 数据库运行后。在我的每个硒测试中我 覆盖/实现一个返回所需DBUnit行为的方法。

    @覆盖 protected 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。