2014-01-31 9 views
1

Я пытаюсь очистить наш функциональный пакет на работе, и мне было интересно, есть ли способ, чтобы огурец повторил сценарий и посмотрел, если проходит, прежде чем перейти к следующему сценарию в этой функции? Phantom - это мой безголовый браузер для веб-браузера poltergeist - мой водитель.Есть ли способ сделать огурец попробовать сценарий еще раз, прежде чем переходить к следующему сценарию

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

Было бы неплохо иметь крючок (одну идею), которая возникает после каждого сценария. Если сценарий проходит, тогда распечатывайте результаты для этого сценария и продолжайте движение. Однако, если сценарий не работает, попробуйте запустить его снова, чтобы убедиться, что у него нет головокружения. Затем и только тогда вы распечатываете результаты для этого сценария и переходите к следующему тесту.

Есть ли у кого-нибудь идеи о том, как реализовать это?

Я думаю, что-то вроде

After do |scenario| 
    if scenario.failed? 
     result = scenario.run_again # I just made this function up I know for a fact this doesn't actually exist (see http://cukes.info/api/cucumber/ruby/yardoc/Cucumber/Ast/Scenario.html) 
     if !result 
      Cucumber.wants_to_quit = true 
     end 
    end 
end 

Первоначальное решение я увидел это: How to rerun the failed scenarios using Cucumber?

Это было бы хорошо, но мне нужно было, чтобы убедиться, что

cucumber @rerun.txt 

действительно исправил отчеты, если тест прошел. Как

cucumber @rerun.txt --format junit --out foo.xml 

Где foo.xml является отчет JUnit, который изначально сказал, что функция 1, 2 & 5 проходили в то время как 3 и 4 потерпели неудачу, но теперь будет говорить 1, 2, 3, 4 & 5, проходящей хотя rerun.txt только сказал, чтобы повторить 3 и 4.

+0

звучит так, будто у вас есть проблема с грузоподъемностью здесь, чтобы быть правдивой. Если ваш тест env перегружен несколькими испытаниями огурца, то какой шанс имеет реальная окружающая среда, если несколько пользователей попадут в нее одновременно. Возможно, основное внимание должно быть сосредоточено на более надежном тестовом сервере, который больше похож на производство, или на решение проблемы производительности сайта в соответствии с тем, что, вероятно, является довольно скромной нагрузкой (это после всего функционального тестирования, а не для загрузки, сколько проверок работают в одно и то же время?) –

+0

@mpdunson Вам удалось найти способ сделать это? Я в основном знаю команду 'rew run', но это не работает для меня. Те тесты, которые у меня есть, зависят друг от друга из-за способа разработки приложения. Таким образом, все мои тесты терпят неудачу, если по какой-то причине второй тест не удается.Я искал способ, похожий на ваш, что если я могу запустить этот конкретный сценарий, пока он не пройдет, прежде чем перейти к следующему? вместо использования циклов 'until' или' except' в шагах. Есть идеи на это? –

ответ

3

Я использую повторную экстенсивно, и да, он выводит правильные функции в файл rerun.txt. У меня есть файл cucumber.yml, который определяет кучу «профилей». Обратите внимание на профиль повторного запуска:

<% 
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : "" 
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}" 
%> 

<% standart_opts = "--format html --out report.html --format rerun --out rerun.txt --no-source --format pretty --require features --tags [email protected]" %> 
default: <%= standart_opts %> --no-source --format pretty --require features 


rerun: <%= rerun_opts %> --format junit --out junit_format_rerun --format html --out rerun.html --format rerun --out rerun.txt --no-source --require features 

core: <%= standart_opts %> --tags @core 
jenkins: <%= standart_opts %> --tags @jenkins 

Так что здесь происходит, что я запускаю огурец. Во время первого запуска он выкинет все неудавшиеся сценарии в файл rerun.txt. Затем, после того, как я буду перезапускать только неудавшиеся тесты с помощью следующей команды:

cucumber -p rerun 

Только падение этого является то, что он требует дополнительной команды (которую вы можете автоматизировать, конечно) и что он загромождает если они есть на месте.

+0

Благодарим вас за ответ. Я только что проголосовал за это. Я попробую и приму ответ после этого. – mpdunson

+1

Одна из проблем - наша сборка не видит некоторых из предыдущих успехов. Когда он пишет junit_format_rerun, он перезаписывает то, что было ранее там. Поэтому, если все функции в файле свойств не передаются на одном и том же проходе, часть информации теряется. Есть ли добавочный форматировщик в огурце и/или сторонней библиотеке, которая написала форматировщик огурца, достаточно интеллектуальный, чтобы знать, где разместить успешные функции? Я мог написать один и поместить его на github, но я подумал, что кто-то еще может столкнуться с этой проблемой. – mpdunson

+0

Также. Как вы справляетесь с пропущенными функциями? Кажется, что они не вошли в rerun.txt. – mpdunson

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