【问题标题】:Database cleanup after Selenium testsSelenium 测试后的数据库清理
【发布时间】:2011-01-13 14:02:28
【问题描述】:

在我使用 Maven 运行一堆 Selenium (jUnit4) 测试后,我想做一个数据库清理(删除他们插入的东西等)。这是一个在 Tapestry/Spring/Hibernate 和遗留数据库上运行的旧项目。我想在 @After 带注释的方法中进行清理 - 但注入 DAO's/Managers/SessionFactory 不起作用。

测试如下:我在一个控制台中运行 (mvn jetty:run-war) 应用程序,然后在另一个控制台 (mvn test) 中开始测试 - 它访问 localhost:8080 上的应用程序。

【问题讨论】:

  • 你可以看看这个问题:stackoverflow.com/questions/82949/…
  • 您正在寻找如何解决问题的提示:“但是注入 DAO's/Managers/SessionFactory 不起作用。”或其他方式来设置和重置您的测试数据?

标签: java hibernate spring selenium selenium-webdriver


【解决方案1】:

几种可能的方法:

  1. 使用dbunit,它旨在将数据库返回到测试之间的已知状态。
  2. 使用try{} finally{} 块将每个测试包装在数据库事务中,最终回滚事务。
  3. 严格使用数据库进行测试,不要担心。让您的测试每次都创建唯一标识/命名的值,这样您就不会发生冲突,否则不要采取任何行动。

【讨论】:

  • +1 我使用策略 3(有时也使用策略 2),但对此有很多争论。您不能总是保证将系统恢复到其原始状态(例如,如果您有一个提交事务的业务方法并且您需要对其进行测试,如果您的程序在提交之后但在您的清理代码之前崩溃,那么您已经得到数据库中的垃圾)。鉴于有时您的数据库中可能有垃圾,您必须使用测试数据库,然后您不妨放松一下,节省编写任何清理代码的时间。
  • @Adrian Smith:同意。另一种思考方式是,参与的人(程序员、测试人员等)越多,你就越有可能最终排名第三,因为做任何事情都变得不可行。
【解决方案2】:

我宁愿使用

@Transactional

上述方法声明的注解。它在每次测试后运行回滚。这对我来说可以。

例如:

@Test
@Transactional  
public void simpleTest(){    
    // your logic here     
}

【讨论】:

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