0

Мы тестируем веб-приложение с использованием Cucumber и жемчуга PageObject, запускаем CI на TeamCity. Мы столкнулись с проблемой, которую никто из нас не может решить.TeamCity - Приемочные испытания на огурцы, не срабатывающие в течение дня, но проходящие в ночное время

Мы имеем доступ к двум выпадающим спискам, объединенное содержимое которых генерирует поле выбора радио. Когда я запускаю его с моего локального компьютера, он проходит, но при запуске с сервера интеграции в той же среде он больше всего не работает ...

... кроме ночи. Я сконфигурировал некоторые запланированные сборки, чтобы я мог наблюдать их в стабильной среде, и он последовательно проходит всю ночь.

Ошибка, которую она выбрасывает, заключается в том, что выпадающее меню страны (второе поле, в зависимости от «клиент», которое является первым) не содержит значения для выбора. Я проверил его вручную, и кажется, что поле Client пусто.

Код ошибки, приводящий к ошибке, приведен ниже. Обратите внимание, что я пробовал несколько способов доступа к этому, включая отказ от Watir Webdriver, но ни одна из них не имела никакого значения.

Считаете ли вы, что это просто проблема с производительностью? Я не понимаю, как это может быть из-за того, что тестовые агенты запускают только один проект за раз, поэтому теоретически они должны выполнять то же самое независимо от нагрузки на сборку.

def safe_select_client(value, attempts = 10) 

    count_attempts_to(attempts)do 
    self.client_code = value 
    if self.client_code_element.selected? value 
     next 
    else 
     $stdout.puts attempts-1 
     safe_select_client(value, attempts-1) 
    end 
    end 
end 

def safe_select_country(value, attempts = 10) 
    count_attempts_to(attempts) do 
    self.client_country = value 
    if self.client_country_element.selected? value 
     next 
    else 
     safe_select_country(value, attempts-1) unless self.client_country_element.selected? value 
    end 
    end 
end 


def safe_select_proposition(value, attempts = 10) 
    count_attempts_to(attempts) do 
    self.select_default_proposition 
    safe_select_proposition(value, attempts-1) unless default_proposition_selected? 
    end 
end 
+0

Глядя на код выше, кажется, что вы устанавливаете значение при выпадающем списке, а затем сразу проверяете, установлено ли значение. Зачем ты это делаешь? Что заставило вас написать этот код? – Cheezy

+0

Поскольку это значение не было надежно установлено в элементе. Я бы закончил сдержанными скриптами, потому что зависимые select_lists не были заполнены. Я никогда не мог воспроизвести это вручную, но все время видел его в автоматизированном наборе. –

+0

Скорее всего, это сценарии с задержкой, потому что, очевидно, они сообщают об ошибке и переходят после таймаута. –

ответ

1

У меня есть решение для этого.

Разработчики приложений изучили это и обнаружили, что ошибка связана с надежностью приложения, а не с тестовым кодом: клиент кэшировал значения для раскрывающихся списков. Это ошибка, которая никогда не была бы обнаружена - или была бы обнаружена в производстве с гораздо более дорогостоящим исправлением - если бы не автоматическое приемочное тестирование.

Спасибо всем.

0

Похоже, проблема с производительностью заключается в том, что сценарий пытается установить раскрывающееся меню страны, прежде чем она завершит загрузку.

Не зная, что делает метод count_attempts_to, похоже, что ваш код пытается установить выпадающее значение и повторить попытку много раз. Однако, если значение не существует, повторные попытки, вероятно, не будут выполняться, поскольку исключение уже было бы выбрано. Даже если часть повтора работала, повторы появляются немедленно, поэтому выпадающее меню все еще не может быть загружено.

Вместо этого вы должны использовать встроенные методы ожидания - см. http://watirwebdriver.com/waiting/.

Предполагая, что count_attempts_to только часть вашего механизма повторных попыток, я думаю, вы могли бы переписать метод страны (и другие), как:

def safe_select_country(value) 
    self.client_country_element.option(:value => value).when_present.set 
end 

Это говорит ждать опцион на срок до 30 секунд. Когда он будет найден, выберите его.

+0

Я боюсь, что, боюсь. Это фактически ухудшило надежность сценариев, потому что я начал видеть StaleElementReferenceErrors в дополнение к моим существующим проблемам. –

+0

Выяснил ли исключение, какой элемент был устаревшим - список выбора client_country или значение параметра? –

+0

Я искал ошибку, но TeamCity logs aren; t легко найти –

Смежные вопросы