SMART BDD TESTING USING CUCUMBER AND JACOCO - AUTHOR: ARISH ARBAB IS A SOFTWARE ENGINEER AT HCL SINGAPORE PTE LIMITED, HAVING EXPERTIZE ON AGILE ...

Page created by Michele Webb
 
CONTINUE READING
SMART BDD TESTING USING CUCUMBER AND JACOCO - AUTHOR: ARISH ARBAB IS A SOFTWARE ENGINEER AT HCL SINGAPORE PTE LIMITED, HAVING EXPERTIZE ON AGILE ...
www.hcltech.com

                        Smart BDD Testing
                        Using Cucumber
                        and JaCoCo

            Business
            assurance
            $ Testing

                         AuthOr:
                         Arish Arbab is a Software Engineer at HCL
                         Singapore Pte Limited, having expertize on Agile
                         GUI/API Automation methodologies.

WHITEPAPER                                                 April 2015
SMART BDD TESTING USING CUCUMBER AND JACOCO    |   April 2015

                                                     TABLE OF CONTENTS

                                                     INTRODUCTION                                                                   3

                                                     PROBLEM FACED                                                                  3

                                                     SOLUTION APPROACH                                                              4

                                                     BENEFITS                                                                       6

                                                     IMPROVEMENTS                                                                   7

                                                     APPLICABILITY TO OTHER PROJECTS                                                7

                                                     UPCOMING FEATURES                                                              7

                                                     REFERENCES                                                                     8

                                                     APPRECIATIONS RECEIVED                                                         8

                                                     ABOUT HCL                                                                      9

© 2015, HCL TECHNOLOGIES. REPRODUCTION PROHIBITED. THIS DOCUMENT IS PROTECTED UNDER COPYRIGHT BY THE AUTHOR, ALL RIGHTS RESERVED.   2
SMART BDD TESTING USING CUCUMBER AND JACOCO    |   April 2015

                                                     INTRODUCTION
                                                     Behavioral Driven Development (BDD) testing uses natural language to describe
                                                     the “desired behavior” of the system that can be understood by the developer, tester
                                                     and the customer. It is a synthesis and refinement of practices stemming from TDD
                                                     and ATDD. It describes behaviors in a single notation that is directly accessible to
                                                     domain experts, testers and developers for improving communication. It focuses on
                                                     implementing only those behaviors, which contribute most directly to the business
                                                     outcomes for optimizing the scenarios.

                                                     PROBLEM FACED
                                                     By using the traditional automation approach, and if given a summary report of
                                                     automated tests to the business analysts, then it is guaranteed that the report would be
                                                     met with a blank expression. This makes it tricky to prove that the tests are correct—
                                                     do they match the requirement and, if this changes, what tests need to change to
                                                     reflect this? The whole idea behind BDD is to write tests in plain English, describing
                                                     the behaviors of the thing that you are testing. The main advantage of this is that
                                                     the tests reflect the user stories and the business requirements of the application.
                                                     Therefore, the results generated can be read by a non-technical person, e.g., a project
                                                     sponsor, a domain expert, a business analyst, and the tests can be validated against the
                                                     requirements for better operational efficiency.

                                                     To achieve the BDD approach, there is an open source tool—Cucumber—that
                                                     parses the scenarios/tests that are written in Gherkin language (GWT). This tool also
                                                     interacts with the API/Junit/Source code of an application, using its step definitions
                                                     test code. The best option to get the business intent into our tests is to have clear
                                                     deliverables and acceptance criteria in the user stories. These can be then translated
                                                     into feature tests containing scenarios written in Gherkin Language.

                                                     BDD is the “outside-in” software development methodology, which has changed
                                                     the tester’s role dramatically in the recent years and bridges the communication gap
                                                     between business and technology. This innovative approach has the potential to shape
                                                     a new organization standard with new SDET roles.

                                                     Problems faced while implementing the new framework:

                                                     yy Justifying the coverage done by this framework becomes difficult as the complexity
                                                        of the application code increases
                                                     yy Exposing APIs/Source Code was difficult as developers disagreed
                                                     yy Converting the software requirement into GWT format at the later stages of the
                                                        software development utilized more efforts
                                                     yy Requiring testers with good technical/coding knowledge
                                                     yy Extending the Junit by using the mocking techniques or spring-based test was a
                                                        hindrance when the complexity of the code increased
                                                     yy Convincing the BTMs to review the scenarios on every day was difficult

© 2015, HCL TECHNOLOGIES. REPRODUCTION PROHIBITED. THIS DOCUMENT IS PROTECTED UNDER COPYRIGHT BY THE AUTHOR, ALL RIGHTS RESERVED.          3
SMART BDD TESTING USING CUCUMBER AND JACOCO    |   April 2015

                                                     SOLUTION APPROACH
                                                     Traditionally, software requirement was written in simple English sentences, but to
                                                     convert those requirements into GWT format required an extra effort that should be
                                                     properly handled. As GWT approach results in better quality of product, requirement
                                                     should be written in GWT format by the business analyst at the early stages of software
                                                     development rather than writing the requirement in domain-specific language. Set of
                                                     scenarios should depict a particular user story. Implementing this approach in a later
                                                     stage may increase the cost of a project.

                                                     Example of writing the scenarios in the abovementioned format would be:

                                                     Traditional software requirement: As a user, I want to login to the application with
                                                     valid credentials.

                                                     Simple Cucumber Feature File in Gherkin Format:

                                                     Feature: Login to the system,

                                                                User should be allowed to login with valid credentials

                                                                Scenario: Login Success

                                                     Given The login page is opened

                                                     When I input valid username and password in the textboxes

                                                     And I click the login button

                                                     Then I logged in successfully.

                                                     Step definitions for matching scenarios:

                                                     Similarly for “When” and “Then,” step definitions are created.

                                                     Corresponding step definitions are then written, and the result is displayed in the
                                                     above format that assures developer/tester/BA and customers that a particular software
                                                     requirement has been successfully implemented.

                                                     Common method of testing an application at the API level requires its API or web
                                                     services. However, if the application has neither the API available nor the developers
                                                     who want to create it for testing purposes, then the problem arises to test the code
                                                     written by developer without any extra development effort. To overcome this problem,
                                                     Junit classes that are written by developers can be used to call the respective service
                                                     methods. However, if the unit testing is being done using mocking technique, then
                                                     it would be difficult to test the actual functionality of the application. So, in order
                                                     to use the Junit methods effectively, dependency injections techniques can be used
                                                     at the testing end. Such usage would call the Junit method by passing a particular
                                                     dependency, which, in turn, calls the real service method.

© 2015, HCL TECHNOLOGIES. REPRODUCTION PROHIBITED. THIS DOCUMENT IS PROTECTED UNDER COPYRIGHT BY THE AUTHOR, ALL RIGHTS RESERVED.         4
SMART BDD TESTING USING CUCUMBER AND JACOCO    |   April 2015

                                                     BDD approach—detailed explanation of using Cucumber by leveraging Junit

                                                     The pictorial representation of Cucumber automation framework:

                                                        App Service
                                                        Methods                            Model                Service Methods

                                                        Junit Classes                        Junit Classes containing unit test methods

                                                                                                    Cucumber Step Definitions

                                                        Cucumber
                                                                            Cucumber Main(Driver)

                                                                            Feature File(Scenarios)

                                                        DB, Test Data                                                        Test Result
                                                        And Reports          Data(.xlsx)      Database          HTML Reports, Screen shots, logs of failed
                                                                                                                            scenarios etc.

                                                     Flow of the BDD framework using Cucumber is as follows-

                                                     yy The test data, which is to be used in the scenarios, is stored in Excel sheet or MySql
                                                        Database.
                                                     yy The test data is then passed to feature file, containing scenarios written in GWT
                                                        format. Scenarios are denoted by certain tags.
                                                     yy Driver class decides which scenario among the entire features files should be executed
                                                        by proving a proper tag value. Before running a particular feature, dependency used
                                                        in application is injected to avoid mocking unit testing framework.
                                                     yy Appropriate matching method defined in the Cucumber step definition file is
                                                        called.
                                                     yy From the step definition, appropriate unit test method of the parameterized Junit
                                                        class is called and, thus, test data is passed into it.
                                                     yy Unit test method, which, in turn, calls the real service method by passing the test
                                                        data to it.
                                                     yy Response is then returned from the service method to unit test method, which, in
                                                        turn, passes the information to Cucumber step definition file.
                                                     yy Expected response is validated against the returned (actual) response in the step
                                                        definition.
                                                     yy Logs are created upon failure or success and an auto HTML report is created,
                                                        depicting the passed and failed scenarios in appropriate colors.

© 2015, HCL TECHNOLOGIES. REPRODUCTION PROHIBITED. THIS DOCUMENT IS PROTECTED UNDER COPYRIGHT BY THE AUTHOR, ALL RIGHTS RESERVED.                            5
SMART BDD TESTING USING CUCUMBER AND JACOCO    |   April 2015

                                                     Now, if we have the API available, then, instead of calling the Junit test method, the
                                                     API method is called directly and rest of the flow remains the same.

                                                     Then the question arises, “Whether or not we are covering all the areas of an application
                                                     with our test as the scenarios written are very behavioral specific?” Here the need
                                                     for the code coverage arises. JaCoCo is one of the tools, which can be integrated
                                                     with Cucumber Test, and the code coverage report generated can be easily read by
                                                     customers/developers/business analysts and testers. The traditional way of testing may
                                                     work out with testers, having less technical knowledge. Nevertheless, as we can clearly
                                                     point out by seeing the above solutions and exposure of code to tester. The need for a
                                                     tester with good coding skills is prerequisite to implement this approach successfully.

                                                     JaCoCo report

                                                     Cucumber test execution can be integrated into CI (Jenkins) server and can be
                                                     executed depending upon the need. Now, when we have everything in place—
                                                     scenarios, test code and test results—it becomes difficult to convince the BTMs to
                                                     review the scenarios on a daily basis. There is another open-source tool available that
                                                     overcomes these difficulties: Pickles, open-source living document generator. This tool
                                                     generates the document consisting of the scenarios, which can be easily reviewed by
                                                     the customer as it supports advance search capabilities.

                                                     BENEFITS

                                                     Key Benefits

                                                     yy Cucumber and JaCoCo are open-source tools, which provide equal benefits that
                                                        other paid tools provide.
                                                     yy Around 80% reduction in the test execution time as compared to manual testing.
                                                     yy Cucumber can be integrated with existing tools like Selenium, TestComplete and
                                                        QTP.
                                                     yy Quality of an application increased as the defect is found at an early stage of
                                                        development.
                                                     yy Cucumber can be used to test REST and SOAP Web services, thereby, easily
                                                        adjusting in traditional way of API automation.

© 2015, HCL TECHNOLOGIES. REPRODUCTION PROHIBITED. THIS DOCUMENT IS PROTECTED UNDER COPYRIGHT BY THE AUTHOR, ALL RIGHTS RESERVED.           6
SMART BDD TESTING USING CUCUMBER AND JACOCO    |   April 2015

                                                     yy Unlike other API testing tools, it produces more detailed, easy-to-understand test
                                                        execution report for client, developer, BA and tester regardless of their technical
                                                        knowledge.
                                                     yy One of the eminent features of Cucumber is that the separation on three levels of
                                                        feature, steps and world makes it easier to reuse certain parts of the code.
                                                     yy Scenarios can be written in different languages, including French, German, Chinese
                                                        and Hindi.
                                                     yy Cucumber with Code Coverage tool (JaCoCo) provides efficient and advanced way
                                                        of testing applications.
                                                     Available for nine programming languages, Cucumber is an open-source tool for BDD.
                                                     The tool is available in languages such as Ruby, JVM-based languages, JavaScript and
                                                     .NET (.NET languages are supported through the SpecFlow tool.).

                                                     IMPROVEMENTS

                                                     The key learning is as follows:

                                                     yy Team gained knowledge on API automation using smart BDD tools (Cucumber
                                                        and JaCoCo).
                                                     yy Team was able to understand the requirements better due to the constant interaction
                                                        with BAs, and the interaction with developers helped the team increase its technical
                                                        knowledge.
                                                     yy Detailed test results report was generated in the UI automation by integrating
                                                        Selenium with Cucumber.
                                                     yy Exposure to continuous integration servers increased, which helped in scheduling
                                                        the overnight batch execution.
                                                     yy Team collaboration and communication techniques—used for involving
                                                        customers—such as Pair Programming and Code Reviews became frequent.

                                                     APPLICABILITY TO OTHER PROJECTS
                                                     yy BDD testing is not restricted to any domain, and, hence, can be used in any domain.
                                                     yy It can be easily adjusted/merged to the traditional automation approach.
                                                     yy By leveraging Cucumber, API-based projects can also use these techniques.
                                                     yy Junit/Nunit test method can be used along with Cucumber to achieve BDD.
                                                     yy Cucumber dependencies are openly available, which can be easily integrated with
                                                        any project.

                                                     UPCOMING FEATURES
                                                     yy Collaborate across the globe with a real-time shared editor
                                                     yy Access the latest version of your executable specifications anytime

© 2015, HCL TECHNOLOGIES. REPRODUCTION PROHIBITED. THIS DOCUMENT IS PROTECTED UNDER COPYRIGHT BY THE AUTHOR, ALL RIGHTS RESERVED.         7
SMART BDD TESTING USING CUCUMBER AND JACOCO    |   April 2015

                                                     yy Link to issue trackers
                                                     yy Edit incorrect specifications instantly, and see the results as they appear

                                                     REFERENCES
                                                     http://en.wikipedia.org/wiki/Cucumber_(software)

                                                     http://cukes.info/

                                                     http://www.ibm.com/developerworks/library/a-automating-ria/

                                                     https://github.com/cucumber/cucumber/wiki/Cucumber-JVM

                                                     http://en.wikipedia.org/wiki/Behavior-driven_development

                                                     http://guide.agilealliance.org/guide/bdd.html

                                                     APPRECIATIONS RECEIVED
                                                     Proof of Concept was accepted and greatly appreciated by the client. Appreciation for
                                                     this practice was also provided by the head and the project manager.

                                                     ABBREVIATIONS
                                                      Abbreviation         Expansion
                                                      TDD                  Test Driven Development
                                                      ATDD                 Acceptance Test Driven Development
                                                      JaCoCo               Java Code Coverage
                                                      UI                   User Interface
                                                      SDET                 Software Development Engineer in Test
                                                      GWT                  Given-When-Then
                                                      BA                   Business Analyst
                                                      HTML                 Hyper Text Markup Language
                                                      CI                   Continues Integration
                                                      API                  Application Program Interface
                                                      JVM                  Java Virtual Machine
                                                      BTM                  Business Technology Manager

© 2015, HCL TECHNOLOGIES. REPRODUCTION PROHIBITED. THIS DOCUMENT IS PROTECTED UNDER COPYRIGHT BY THE AUTHOR, ALL RIGHTS RESERVED.       8
ABOUT HCL

                         About HCL Technologies
                         HCL Technologies is a leading global IT services company working with clients in the
                         areas that impact and redefine the core of their businesses. Since its emergence on the
                         global landscape, and after its IPO in 1999, HCL has focused on ‘transformational
                         outsourcing’, underlined by innovation and value creation, offering an integrated
                         portfolio of services including software-led IT solutions, remote infrastructure
                         management, engineering and R&D services and business services. HCL leverages
                         its extensive global offshore infrastructure and network of offices in 31 countries to
                         provide holistic, multi-service delivery in key industry verticals including Financial
                         Services, Manufacturing, Consumer Services, Public Services and Healthcare &
                         Life sciences. HCL takes pride in its philosophy of ‘Employees First, Customers
                         Second’ which empowers its 100,240 transformers to create real value for customers.
                         HCL Technologies, along with its subsidiaries, had consolidated revenues of
                         US$ 5.7 billion, for the Financial Year ended as on 31st December 2014 (on LTM
                         basis). For more information, please visit www.hcltech.com

                         About HCL Enterprise
                         HCL is a $6.8 billion leading global technology and IT enterprise comprising two
                         companies listed in India – HCL Technologies and HCL Infosystems. Founded
                         in 1976, HCL is one of India’s original IT garage start-ups. A pioneer of modern
                         computing, HCL is a global transformational enterprise today. Its range of offerings
                         includes product engineering, custom & package applications, BPO, IT infrastructure
                         services, IT hardware, systems integration, and distribution of information and
                         communications technology (ICT) products across a wide range of focused industry
                         verticals. The HCL team consists of over 105,699 professionals of diverse nationalities,
                         who operate from 31 countries including over 505 points of presence in India.
                         HCL has partnerships with several leading global 1000 firms, including leading
                         IT and technology firms. For more information, please visit www.hcl.com

Hello there! I am an Ideapreneur. I believe that sustainable business outcomes are driven by relationships nurtured through
values like trust, transparency and flexibility. I respect the contract, but believe in going beyond through collaboration,
applied innovation and new generation partnership models that put your interest above everything else. Right now 105,000
Ideapreneurs are in a Relationship Beyond the Contract™ with 500 customers in 31 countries. How can I help you?
You can also read