Test Automation is the process of automatically running a test suite (collection of test cases). Some of the benefits include fast results, efficient execution, repeatable steps, reduced testing time and cost. However, an adequate Test Automation Framework must be extendable and maintainable to achieve success. In this blog, let us examine tips for building an Effective Test Automation Framework From Scratch.
Test Automation Pyramid
The test pyramid is a tip for building an effective test framework because it helps establish a fair portfolio of diverse automated tests. Many engineers think of automation from a User Interface (UI) Layer perspective. We have 2 more types to consider for automation: Service Layer and Unit Layer. The following is a screenshot of a test pyramid.
UI Test Layer
UI Testing is when user interactions are performed on a web application’s front-end. It’s a process of verifying logic or particular functionality. Our automation test clicks buttons, clicks links, enters data into fields, navigates to various pages, and many other functional test types. Automating a test from the UI is the most known type of automation test.
Service Test Layer
Service Testing is an intermediate layer between UI and Unit. It can speed up our automation execution by implementing a script that takes our test scenario to a particular application page. As a result, we bypass certain UI steps with a service test.
For example, if our test scenario involves calculating the total price of a product on the Add To Cart page. The Service Test can directly proceed to the Add To Cart page without navigating through multiple pages via the web applications.
Unit Test Layer
Unit Testing is located at the pyramid’s base. It consists of testing a small piece of code. The code can be a class or method/function. A unit test can be written without relying on other components. The purpose is to determine if that specific unit operates how the creator intends for it to function.
SUGGESTED READ -
Creating a design pattern is essential for building a test framework from scratch for automation. Programming is one of the necessary skills for a robust design pattern. For example, the Page Object Model design pattern is popular because each class file represents a web page or component in the web page.
Two of the main Object-Oriented Principles (OOP) utilized in Page Object Models are Encapsulation and Inheritance. Encapsulation is a programming mechanism that binds code and data and then keep them safe from outside interference. Inheritance is the process where one class is derived from an existing class. The benefits of a design pattern include code reusability, code readability, and code maintainability.
- Code reusability is when automation engineers reuse code in multiple locations.
- Code readability means the code is easy to follow because there are less lines of code, and the names are descriptive.
- Code maintainability means it will take less time to make a change to our code.
The following is a screenshot that displays how page object classes are stored separately from test scripts and the web pages.
A test framework is vital to an automation framework because most automation tools/API’s do not verify a test. For instance, Selenium WebDriver is only used for automating a web application. There is no way Selenium can determine whether the test passed or failed.
As a result, the testing efforts are fulfilled through a 3rd Party Tool like TestNG, JUnit, etc. A test framework’s purpose is to monitor testing and development of an Application Under Test (AUT). From scratch, we must make sure a test framework is integrated with our automation framework, so it comprises core functions such as
- Creating and Executing Test Scripts
- Generating Test Reports
- Generating Logs
- Reading and Writing Test Data
We verify our test passed or failed with assertion statements like assertEquals() and assertTrue(). When it comes to TestNG, the test can include Hard or Soft Asserts. A Hard Assert stops immediately after a Failure. However, a Soft Assert continues execution after a failed assertion and moves to the next statement line. It should always include the assertAll() method, so the test accurately passes or fails.
Behavior Driven Development (BDD)
Behavior Driven Development (BDD) is a popular collaboration approach with stakeholders of an agile team. Normally, the stakeholders have a meeting called the 3 Amigos, which take User Stories then turn the stories into Gherkin scenarios.
A Gherkin (Given-When-Then-And) scenario is non-technical, clear to read, and applied to describe test cases. It is a Domain Specific Language that has a set of special keywords to provide structure for an executable specification. Some of the keywords are
- Feature – first keyword followed by a colon to provide a high-level description of the software
- Rule – represents one business rule
- Scenario – describes the behavior’s test case
- Given – initial state of the system
- When – an action the user should take describe an event
- Then – an expected testable outcome
- And – continues any of the keywords Given, When, Then
BDD is a way for software agile teams to close the communication gap between technical people and business people (non-technical people). It produces documentation that is analyzed against the system behavior. Plus, BDD increases the flow of value along with feedback.
The test pyramid, design pattern, test framework, and BDD are fundamentals that assist with building an effective test automation framework from scratch. In addition, a utility class can be included with the other parts. It is an effective way to create reusable generic methods that can be used throughout the test automation framework. All of them work together as a group.
For testing in agile, we have the option of performing in-sprint automation. It’s an approach to automate the business requirements within the same sprint. As a result, automation has no backlog. ACCELQ has an abstraction capability to permit in-sprint automation, GUI, and API test automation. It’s good for CI/CD to achieve workflow integration with system tools like JIRA, TFS, Jenkins, Bamboo, etc.
The test pyramid is important because it shows a balanced testing perspective. The UI testing layer demonstrates value along with the service and unit layers. A design pattern such as Page Object Model is implemented to solve coding problems engineers face when creating test scripts. The benefits consist of code reusability, code readability, and code maintainability.
A test framework like TestNG simplifies the process of testing. We can easily add an annotation and assert statement and then begin performing some test types like Parallel Testing, Integration Testing, Data Driven Testing, Cross Browser Testing, End To End Testing.
BDD promotes collaboration between stakeholders within an agile team (QA, Developers, Customer/Product Representatives). The goal is to transform User Stories into plain Gherkin keywords that describe test cases.
With the assistance of a product like ACCELQ, it is a plug-and-play framework that delivers a business-process perspective to Behavior Driven Designs. The built-in framework has best practices while being modular and reusable. You do not need to invest time in building a framework allowing easy integrations into the CI/CD ecosystems. Each aspect of the Quality lifecycle, from test design to execution, can be easily automated to suit your test automation needs. Give it a try. Happy Testing.