2014-02-18 130 views
1

有没有办法在两次测试之间等待一段时间?我需要一个解决方案来弥补服务器滞后。创建记录时,需要一点时间才能在我的环境中搜索记录。Geb:在测试之间等候/睡眠

在下面的代码示例中,我将如何在第一次测试和第二次测试之间等待30秒,并且在第二次测试和第三次测试之间没有等待时间?

class MySpec extends GebReportingSpec { 
     // First Test 
     def "should create a record named myRecord"() { 
      given: 
      to CreateRecordsPage 

      when: 
      name_field = "myRecord" 

      and: 
      saveButton.click() 

      then: 
      at IndexPage 
     } 

     // Second Test 
     def "should find record named myRecord"() { 
      given: 
      to SearchPage 

      when: 
      search_query = "myRecord" 

      and: 
      searchButton.click() 

      then: 
      // haven't figured this part out yet, but would look for "myRecord" on the results page 
     } 

     // Third Test 
     def "should delete the record named myRecord"() { 
      // do the delete 
     } 
    } 

回答

6

你可能不想等一段时间 - 它会让你的测试变慢。理想情况下,您希望在添加记录后尽快继续。您可以使用Geb的waitFor {}来轮询要履行的条件。

// Second Test 
    def "should find record named myRecord"() { 
     when: 
     to SearchPage 

     then: 
     waitFor(30) { 
      search_query = "myRecord" 
      searchButton.click() 
      //verify that the record was found 
     } 
    } 

这将轮询30秒,每半秒争取尽快通过,因为它是和失败,如果它仍然没有30秒后完成需满足的条件。

要了解设置等待时间和间隔有哪些选项,请参阅“The Book of Geb”中的waiting部分。您可能还想查看implicit assertions in waitFor blocks的部分。

如果您的第二个功能方法取决于第一个功能的成功,那么您应该考虑使用@Stepwise注释该规范。

+0

反正有延误吗?我需要在等待一些后台下载完成时添加延迟,但无法找到任何方法来完成。 – Giannis

+0

你是什么意思的延误?你在说什么像'Thread.sleep()'?由于我上面提到的事情,这绝不是一个好主意。 – erdi

4

您应该尽可能使用waitFor并检查条件。但是,如果你发现没有,你可以检查特定的元素,或任何其他条件来检查,你可以用它来等待指定的时间量:

def sleepForNSeconds(int n) { 
    def originalMilliseconds = System.currentTimeMillis() 
    waitFor(n + 1, 0.5) { 
     (System.currentTimeMillis() - originalMilliseconds) > (n * 1000) 
    } 
} 

我不得不使用这个在等待在捕获报表中的截图之前完成一些图表库动画。

+0

没有冒犯,但这实际上只是一种调用'Thread.sleep'的复杂方法。 https://github.com/geb/geb/blob/master/module/geb-waiting/src/main/groovy/geb/waiting/Wait.groovy#L148 –

2
Thread.sleep(30000) 

也有窍门。当然,仍然同意“尽可能使用waitFor”。

+0

当你测试的东西是建立来衡量实际的时间流逝,这可能是最好的选择。 – jonnybot