Cucumber + Webdriver + Java

Ребят, пытаюсь внедрить bdd в проект, второй день ничего не получается, не подскажите более менее побробную документацию на русском?

 

Пытались  внедрить вот эту связку "Cucumber + Webdriver + Java" на протяжении 2 и более недели.

Было гораздо больше проблем, чем пользы.

На русском инфы не было... (у нас)

Русскоязычно поддерживается 1,5 человеками... (столько нашли)

в реализации моего проекта, есть класс Setupwebdriver  , 

он содержит метод setUp , который в анотации @before (junit) . В Этом методе описаны все настройки браузера, профиль, baseUrl и т.д.

И Когда я пытаюсь запустить тест написанный с анотациями cucumber, получаю java.lang.NullPointerException. 

 

т.е.

 

public abstract class SetUpWebdriver {
 
public WebDriver driver=null;
public String baseUrl=null;
public StringBuffer verificationErrors = new StringBuffer();
public boolean acceptNextAlert = true;
 
@Before
public void setUp() throws Exception {
 
// SET Profile
ProfilesIni allProfiles = new ProfilesIni();
FirefoxProfile profile = allProfiles.getProfile("forselenium");
driver = new FirefoxDriver(profile);
 
 
    
baseUrl = "http://www.google.ru";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
 
}
 
/////////////////////////////////////////////////////////////////////////////////////////////
 
 
 
public class Omr extends SetUpWebdriver {
 
 
 
 
 
@Given("^I am on the login page$")
public void startTest() throws Exception {
 
driver.get(baseUrl);
 
}
}
 
 
 

Cucumber Java habr - в поиске Гуг. в помощь.

вы не поняли... тут вопрос именно в анотациях, как их связать?

А зачем вы используете аннотации junit? В cucumber-java есть свои аннотации: http://cukes.info/api/cucumber/jvm/javadoc/cucumber/api/java/package-summary.html

Я поменял на аннотации cucumbera, все равно не получилось(

 

@cucumber.api.java.Before  и @cucumber.api.java.After 

 

 

теперь след ошибка

 

cucumber.runtime.CucumberException: You're not allowed to extend classes that define Step Definitions or hooks. class com.example.tests.Omr extends class webdriver.init.pack.SetUpWebdriver 
 
 
at cucumber.runtime.java.MethodScanner.scan(MethodScanner.java:63)
at cucumber.runtime.java.MethodScanner.scan(MethodScanner.java:41)
at cucumber.runtime.java.JavaBackend.loadGlue(JavaBackend.java:61)
at cucumber.runtime.Runtime.<init>(Runtime.java:72)
at cucumber.runtime.Runtime.<init>(Runtime.java:56)
at cucumber.runtime.Runtime.<init>(Runtime.java:52)
at cucumber.api.junit.Cucumber.<init>(Cucumber.java:59)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
 

Я извиняюсь может быть за флуд...
Но зачем вам вообще БДД внедрять? А особенно кьюкамбер?

Как по мне БДД в стиле "кьюкамбер/джбихейв" это неоправданый оверхед.... 

Рекомендую почитать критику вот здесь:

http://www.satisfice.com/blog/archives/638
http://www.jimmycuadra.com/posts/please-don-t-use-cucumber
 
БДД в стиле кьюкамбера было создано чтобы привлечь продукт оунеров писать более точную и конкретную спецификацию... Но Продукт оунеры все равно в обычном мире не сделают это так эфективно как инженеры соответсвенного профиля. Это раз.
 
Два - это то что когда привазываться к given when and then, не всегда очевидно как оптимизировать все это дело и увеличить покрытие тестами... Особенно когда нужно более детальные и тонкие вещи протестировать, в различных аспектах прогнать один и тот же код...
 
БДД - это в первую очередь для аксептенс тестов - и поэтому если стоит цель поменьше тестировать руками и сделать автотесты самодостаточными и ответсвенными как можно более за качество  - то лучше сразу думать архитектурно в этом направлении а не привязываться к воркфлоу таких фреймворков как кьюкамбер.
 
Как по мне аксептенс тесты - это вообще дело не рук тестеров. Это должны делать девелоперы. Потому что там думать в плане "тест кейсов" особо не надо - вот есть рекваермент - пишем сразу прямой и простой тест кейс,  лучше даже два-три, по очевидным "путям" юз кейса.
 
Если все таки очень хочеться писать аксептенс тесты вместо програмистов - посмотрите хотя бы в сторону БДД фреймворков типа easyb. Там все проще и понятней. А простота всегда способствует лучшей поддержке.
2 лайка

Нужно попробовать внедрить, посмотреть на результат и решить подойдет или нет, все таки есть шансы что именно в наш проект он подойдет) 

Точно! BDD - неоправданный оверхед. Изначальная идея красивая, но она так и осталась утопией. Вот ещё критика некоторых инструментов BDD: Bullshit driven development - Андрей Солнцев — ЖЖ

1 лайк

хыхы))
Классика жанра) человек задал конкретный вопрос, а рассказывают как жить))).

Понимаю что вопрос для автора уже не актуален. Но может пригодится другому.

Ошибка: cucumber.runtime.CucumberException: You’re not allowed to extend classes that define Step Definitions or hooks.

Ответ автора Cucumber:

Если коротко, то не используйте Наследование при работе с Cucumber) А используйте Композицию

согласен, что оверхед.