In
my previous post, I explained how to setup cucumber in command line mode, in
this post I am going to show you how to execute a cucumber application in eclipse.
Below step-by-step
procedure explain complete working example.
Step 1: Open Eclipse. Create
new maven project ‘cucumber_tutorial’.
Right
click on project explorer -> New -> Other
Select ‘Maven Project’ and press Next.
Select the check box 'Create a simple project (skip
archetype selection)'.
Press
Next.
Update
Group Id and Artifact Id as ‘cucumber_tutorial’.
Press
Finish button.
Total
project structure looks like below.
Step 2: Update pom.xml for
maven dependencies. I am using below maven dependencies.
<dependencies> <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-core --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-core</artifactId> <version>2.3.1</version> </dependency> <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> <version>2.3.1</version> </dependency> <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-jvm-deps --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-jvm-deps</artifactId> <version>1.0.6</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/io.cucumber/gherkin --> <dependency> <groupId>io.cucumber</groupId> <artifactId>gherkin</artifactId> <version>5.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-junit --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-junit</artifactId> <version>2.3.1</version> <scope>test</scope> </dependency> </dependencies>
I
faced some proxy problem while downloading these libraries. I downloaded them
manually and added to my project explicitly.
Step 3: Create new class
‘LoginUtil.java’ under the package ‘com.sample.util’.
LoginUtil.java
package com.sample.util; public class LoginUtil { /** * * @param userName * @param password * @return true if the login successful, else false */ public static boolean isLoginSuccessful(String userName, String password) { if (userName == null || userName.isEmpty() || password == null || password.isEmpty()) { return false; } if ("krishna".equals(userName) && "password123".equals(password)) { return true; } return false; } }
Create a package
‘com.sample.features’ and define the file Login.feature.
Login.feature
Feature: Login Login should be quick and friendly. Scenario: Successful Login Users should be logged in successfully by providing correct username and password. Given I have chosen to Login When I log in with user name "krishna" and password "password123" Then I should be logged in successfully And I should see a personalized greeting message
Create
a class ‘LoginTest.java’ in the package ‘com.sample.test’.
LoginTest.java
package com.sample.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import com.sample.util.LoginUtil; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; public class LoginTest { private String userName; @Given("^I have chosen to Login$") public void iHaveChosenToLogin() throws Exception { System.out.println("Opening login page"); } @When("^I log in with user name \"([^\"]*)\" and password \"([^\"]*)\"$") public void iLogInWithCorrectAnd(String userName, String password) throws Exception { if (LoginUtil.isLoginSuccessful(userName, password)) { this.userName = userName; System.out.println("Login successful"); return; } assertFalse("Wrong Credentials. userName " + userName, true); } @Then("^I should be logged in successfully$") public void iShouldBeLoggedInSuccessfully() throws Exception { System.out.println("Logged in Successfully"); } @Then("^I should see a personalized greeting message$") public void iShouldSeeAPersonalizedGreetingMessage() throws Exception { System.out.println("Welcome " + userName); assertTrue(true); } }
Define
the package 'com.sample.main' and define class TestRun.java.
TestRun.java
package com.sample.main; import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; @RunWith(Cucumber.class) @CucumberOptions(monochrome = true, features = "src/test/java/com/sample/features", glue = "com.sample.test", plugin = { "pretty" }) public class TestRun { }
Run
the application as junit test, you can able to see below messages in console.
Feature: Login Login should be quick and friendly. Scenario: Successful Login # src/test/java/com/sample/features/Login.feature:5 Users should be logged in successfully by providing correct username and password. Opening login page Given I have chosen to Login # LoginTest.iHaveChosenToLogin() Login successful When I log in with user name "krishna" and password "password123" # LoginTest.iLogInWithCorrectAnd(String,String) Logged in Successfully Then I should be logged in successfully # LoginTest.iShouldBeLoggedInSuccessfully() Welcome krishna And I should see a personalized greeting message # LoginTest.iShouldSeeAPersonalizedGreetingMessage() 1 Scenarios (1 passed) 4 Steps (4 passed) 0m0.262s
not working dude. Please check steps. It will be nice if you can do it again and provide video link. I tried with FULL internet access and it is not downloading required dependencies. Some issue is there. Please fix and try to repost
ReplyDeleteHi Sagar, I too faced dependencies downloading problem while trying, thats why i said, 'I faced some proxy problem while downloading these libraries. I downloaded them manually and added to my project explicitly.' in step 2. Check the image just before step-3 and download them explicitly and try
Delete