Приемочные испытания с использованием Cucumber / Webdriver никогда не завершаются

Мы используем Gherkin, Cucumber-jvm и Webdriver для запуска приемочных тестов для стандартного веб-приложения Java / Spring. Проблема в том, что при запуске тестов с использованием задания Maven тесты проходят полностью успешно, но задание не завершается. Только после закрытия окна Firefox работа завершается.

У нас есть обходной путь, позволяющий явно закрывать браузер после каждой функции, но это быстро станет неприемлемым из-за задержки во времени.

Технологический стек выглядит следующим образом:

Огурец-JVM 1.0.4

Селен 2.12.0

Firefox 8.0

Приложение работает в JBoss EAP 5.1 на компьютере под управлением Windows 7.

Когда мы использовали версию Cucumber для JRuby, это поведение не проявлялось с вышеуказанной комбинацией селена / firefox, хотя оно проявлялось, когда мы использовали более высокие версии того и другого.

Кто-нибудь видел такое поведение раньше, и есть ли у кого-нибудь предложения или обходные пути?

заранее спасибо


person TrueDub    schedule 30.04.2012    source источник
comment
Почему вы имеете в виду быстро стать неустойчивым из-за отставания во времени. ?   -  person Artem Oboturov    schedule 01.05.2012
comment
Наш тестовый набор (более 2000 шагов) выполнялся за 40 минут с использованием одного экземпляра браузера Firefox. Добавление накладных расходов на закрытие / повторное открытие браузера для каждого файла функции (с тегом) или сценария добавляло больше времени на это, доводя его до неустойчивого уровня в быстро меняющейся базе кода.   -  person TrueDub    schedule 01.05.2012
comment
запустить их параллельно https://github.com/cucumber/cucumber-jvm/issues/86.   -  person Artem Oboturov    schedule 01.05.2012
comment
Очень интересно - я очень ценю вашу помощь в этом, спасибо. Вы знаете, работает ли это только при использовании Surefire и JUnit? На данный момент мы придерживаемся подхода CLI, так как нам нужно разрешить пользователю указывать в командной строке, какие теги запускать.   -  person TrueDub    schedule 01.05.2012
comment
какие теги запускать? Ни Cucumber, ни Selenium не знают тегов. Кто работает под ролью Пользователь?   -  person Artem Oboturov    schedule 01.05.2012
comment
У нас есть каждый сценарий, помеченный тегом - Common заранее с @ или, например, @Stub. Нам нужно иметь возможность запускать любую комбинацию тестов через командную строку, указанную аргументом --tags для cucumber.cli.Main   -  person TrueDub    schedule 01.05.2012
comment
позвольте нам продолжить обсуждение в чате   -  person Artem Oboturov    schedule 01.05.2012


Ответы (2)


Вы закрываете свой WebDriver?

@cucumber.annotation.After
public void afterScenarioRun() {
    driver.close();
}
person Artem Oboturov    schedule 30.04.2012
comment
Да, мы делаем, но именно этого я пытаюсь избежать - накладные расходы, связанные с закрытием, а затем повторным открытием окна браузера, влияют на время работы пакета и будут только ухудшаться. Я надеюсь, что есть другое решение - что-то вроде опции @EndSuite. - person TrueDub; 30.04.2012
comment
Посмотрите на хуки: https://github.com/cucumber/cucumber/wiki/Hooks - person Artem Oboturov; 30.04.2012
comment
Мое предложение о хуках не сработает, потому что для cucumber-jre они по сути такие же, как после и до: cucumber.runtime.java.JavaBackend # addHook - person Artem Oboturov; 30.04.2012
comment
Вы можете реализовать cucumber.runtime.Backend # buildWorld и cucumber.runtime.Backend # disposeWorld, чтобы создать экземпляр WebDriver и закрыть его. И поместите реализацию класса Backend в путь к классам огурцов. См. Источник cucumber.runtime.Runtime # loadBackends: подкласс Backend и поместите свой подкласс в cucumber.runtime.YouBackendImplementation. Надеюсь, это вам поможет. - person Artem Oboturov; 30.04.2012
comment
Спасибо за ответы. Глядя на интерфейс Backend, он говорит, что disposeWorld вызывается в конце сценария, а не после завершения теста. - person TrueDub; 01.05.2012

Я использую Огурец и Селен в весенней среде (с огурцом-весенним). Когда WebDriver управляется Spring, вы можете добавить destroy="close" в определение bean-компонента:

<bean id="webDriver" class="org.openqa.selenium.ie.InternetExplorerDriver" destroy-method="close"/>

Это закроет браузер после завершения всех тестов.

person martin    schedule 25.05.2012