Criteria and Requirements of Functional Testing in an Agile World
A typical manual QA tester spends more than 50% of the time in testing the functionality of the application. A majority of time is spent in executing the same test cases multiple times for regression testing. If these repeatedly executed test cases can be automated, a lot of time and manual effort can be saved.
What is Functional Testing?
Functional Testing is concerned with verifying the functionality of all the features of an application under test(AUT). These functionalities are tested against the feature requirements making sure that all the requirements for a feature are implemented and working accordingly.
Developers generally create unit tests for the code they write, but Functional Testing is usually the first testing done by the software testing team once a feature is ready for testing. Functional testing is also included at the time of regression testing done before the final release because the user will be first going through the workflow covered under the functional tests. Thus automating these tests becomes important.
What is Functional Test Automation?
When the focus of test automation is functional tests, the process is called functional test automation. Most of the test cases automated here are black-box tests that aim to verify the functionality of a particular feature. This testing could be done for user interfaces, APIs, database, security, or any interface that needs some input and gives some output.
How is Functional Test Automation in the Agile World different as compared to that in traditional testing models?
In traditional testing models, different tasks related to development and testing happens one after the other and usually testing starts once the development is complete. This means that the testers do not have much productive work to do while development is in full swing and this also means that developers won’t have much to do while testing is going on unless there are a lot of bugs to fix.
Agile Methodology provides a solution to these problems by breaking big tasks into small tasks that are doable in each sprint. This also means that a deliverable is supposed to be ready by the end of each sprint for evaluation. Following this strategy, testing also needs to be broken down into smaller tasks that can be taken up at each sprint. For this, functional test automation should start in parallel with development.
How to make Functional Test Automation successful in the Agile World?
An important part in making functional test automation successful is played by the test automation tool. Hence this tool should be chosen after carefully understanding the needs not only short term but long term too.
Below mentioned points should give you an idea of how to go about it:
- Decide whether to use an already existing test automation framework or build one from scratch:
At the moment, considering there are multiple options available for software test automation, it is recommended that you go through those options first and decide to build your tool from scratch only in case you are sure your application needs such an in-house framework.
An automation framework may need to be built from scratch if:
- the application under test uses a technology whose testing is not supported by any of the available tools in the market.
- building a framework from scratch will prove more beneficial than investing in an already existing tool.
Any automation framework you choose should give your testers the ability to design test cases even before actual implementation is in place. Testers should be able to make those test cases work once the features are developed and ready for testing.
Time is also an investment in today’s world where software development and deployments are happening at breakneck speed. So, choosing a framework that could be learnt easily in a short time is a good investment to make.
Being developed in an Agile world, the application will go through multiple changes according to the client’s feedback. To keep up with all the changes with ease, an automation framework/tool is needed that enables easy test creation, edits and maintenance. The tool being used should also have the capability to reuse and regroup already created test steps.
With the advent of AI, now there are tools available in the market that can automatically maintain test cases that fail due to changes in the application.
It is unsure if the same tester remains with you during the product’s lifecycle and is highly unlikely so make sure whatever framework you choose, the tests created are easy to understand. The tests should be easy since they need to be reworked on by someone who did not create them at some time.
At present, there are multiple tools available in the market that automate test cases via plain English test steps or flowcharts or screenshots. You need to decide what best meets your requirements.
If any of the automated test cases fail, there should be ample support in the tool to enable the testers to debug and find the cause of failure. If the tool does not make debugging easy, a lot of time could be spent just figuring out what caused the test case to fail. Some of the most sought out features that help to debug are:
- Step by step execution
- Ability to pause execution while debugging
- Ability to take screenshots at the moment of failure
- Ability to skip steps while debugging
There are a lot of stand-alone tools in the market starting with CI/CD tools to reporting tools. Before you start working on test automation, make sure the tool you use supports integration with the tools you may be planning to use or may have been already using.
Also, reporting should provide all the needed information in an easily understandable format.
For different types of test cases, different types of test data could be needed. Sometimes hardcoded, sometimes passed through CSVs or JSON or XML or any other format. Make sure the tool you are using supports passing test data in the format you need.
At present, APIs are the basis of development of functionalities for a lot of products. If your product also uses APIs, the test automation framework or functional testing tool you plan on using should support the automation of these.
Sometimes a need may arise to test the application visually for eg. for the presence or absence of components or text. The tool should have the support either for performing such testing or the ability to integrate with a tool that will allow testing the application visually.
These days applications are being released on all kinds of devices including desktops, laptops and mobile devices. The application must be tested on all the supported devices of all screen sizes and hence the support for testing on all needed environments should be verified before choosing a tool for automation.
When the test cases are less in number, execution does not take much time and parallel execution support does not matter but once the number of automated test cases increase, which is bound to happen eventually. Without parallel execution, the execution of automated test cases can become quite cumbersome and may cause unnecessary delay in providing feedback.
Most of the companies these days use cloud infrastructure for all their development and testing needs and invest in minimal on-premise infrastructure. Thus, a tool that also enables the testers to host their test cases on the cloud and run them directly there can prove highly beneficial.
Whatever tool/framework you decide to use, there will be times when you will come across a situation where external help will be needed. At such times, dedicated support for the tool being used becomes essential to make sure your functional test automation keeps going up without any interruption.
There is no point investing in a tool that takes up all your time in the automation of test cases first and then the maintenance of test cases later. Also, if for automation and for understanding the automated test cases you need to hire new resources with specific skills, which means additional investment in terms of money. And if the automated test cases are brittle and are failing most of the time, the contribution to quality can be considered as negligible.
So, out of all the points above the most important point to consider is to use a functional testing tool that will give ROI in terms of time, money and quality eventually.
Functional Testing Tools that can prove useful:
Considering the above requirements, there are a few tools in the market that meet the above requirements:
- Testsigma: Test cases can be written in plain English and the AI core ensures that the test cases are maintained automatically in most of the scenarios. The test cases are hosted on the cloud and could be executed on a wide range of devices that are again hosted on the cloud. The tool also supports integration with most of the widely used tools.
- TestComplete: Automation could be scriptless via keyword-driven testing or could be done by using supported scripting languages. The test cases could be run on a wide variety of browsers and mobile devices. The tool also supports integration with most of the widely used tools ranging from CI/CD to reporting.
- TOSCA: Automation is again scriptless(model-based approach) with easy automatic maintenance support.
Refer this DZone article to know more about the different functional test automation methods and tools available.