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
}
}
3 ответа
Вы, вероятно, не хотите ждать установленное количество времени - это замедлит ваши тесты. В идеале вы хотели бы продолжить, как только запись будет добавлена. Вы можете использовать Геба 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 секунд.
Чтобы увидеть, какие у вас есть варианты для установки времени ожидания и интервала, посмотрите раздел ожидания в Книге Геба. Вы также можете проверить раздел о неявных утверждениях в waitFor
блоки
Если ваш второй функциональный метод зависит от успешности первого, тогда вам, вероятно, следует рассмотреть возможность аннотировать эту спецификацию с помощью @Stepwise.
Вы всегда должны пытаться использовать waitFor и проверять условия везде, где это возможно. Однако, если вы обнаружите, что нет определенного элемента, который вы можете проверить, или какого-либо другого условия для проверки, вы можете использовать это, чтобы ждать указанное количество времени:
def sleepForNSeconds(int n) {
def originalMilliseconds = System.currentTimeMillis()
waitFor(n + 1, 0.5) {
(System.currentTimeMillis() - originalMilliseconds) > (n * 1000)
}
}
Мне пришлось использовать это в ожидании завершения анимации библиотеки графиков, прежде чем сделать снимок экрана в отчете.
Thread.sleep(30000)
также делает трюк. Конечно, все еще согласны "использовать waitFor, когда это возможно".