When it comes to Quality Assurance, there are two options to choose from: manual testing and automated testing.
Both alternatives constitute a comparison of an actual product and a product that was to be developed (which, basically, what any testing is). So, simply put, software testing is a process aimed at setting the reality, i.e. what we have, against expectations or pre-defined requirements, i.e. what we should have.
The difference between the two option is that the manual testing requires a person who physically checks if everything works properly; while the automated testing may be performed without human intervention.
Before we jump right into the automated testing, let’s first look at some basics of software testing in general, so we can establish the common understanding of the process.
Three layers of software testing
Quality assurance is a complex process that includes many tasks performed at different stages of the software development. There are many types of tests that may be executed to verify a product, but the most common are the following:
- Component testing. As the name suggests, these tests verify the functionality within a specific component in isolation (i.e. one section of a code). They do not deal with the interaction of such component with other components in a system.
- Integration testing. These tests verify several dependent components. Simply put, they check how the functions of a component perform when such component is integrated into a system.
- Regression testing. These tests verify the whole system. The goal is to ensure that newly added functions did not affect the existing functionality.
Now, let’s talk about web automation testing, its types and benefits for a project.
What is test automation: general overview
As we already mentioned, automated testing allows for verification of software with the help of other software and without physical efforts put in the process.
Speaking about its advantages, the first and, probably, the foremost is that automated tests are faster and, thus, less laborious than manual tests. The second reason why test automation is deemed more efficient than quality assurance procedures performed by humans is that it covers more features and makes it possible to have more cycles of test execution. Finally, the results received upon automated software testing are more reliable as the risk of human error is minimized.
So when do we use automation testing? Well, as the main benefit it brings is the significant reduction of time needed to complete the quality assurance process, automated web tests are exceptionally useful for long-term and complex projects.
The only prerequisite you need to have to implement test automation software is appropriate and accurate requirements to the functionality of a product which are possible to verify. This is because although automated software tests can be run unattended, meaning that test execution requires no human intervention, the testing programs are written by people. Hence, if the requirements are vague or ambiguous, it’s just impossible to “tell” the program what it should verify.
Types of automated website testing
Automated web testing makes quality assurance as simple as possible but it’s, of course, up to the development team to decide what to test and when to test. There are several types of automated tests, so let’s briefly discuss each of them so you can see the big picture.
Unit tests. These tests are created by the developers who wrote a code to be tested. There are two layers of unit testing: component testing and integration testing.
Basically, the main purpose of unit tests is programmers’ self-check. But what’s even more important is that a developer has to look at a code from a different perspective as unit testing requires an unconventional approach to the development process, namely:
creating requirements -> writing tests -> development of a product -> code refactoring
Hence, a programmer needs to think about the final result before the first line of a code is even written. This makes the further work more efficient, structured and, well, conscious. Besides, when “decomposing” a code to the smallest elements, a developer can be sure that the new section of a code doesn’t cause harm to the existing parts.
In short, unit tests bring the following benefits to a project:
- they decrease the time needed for regression testing
- they decrease the time needed to find a problem (if such occurs)
- they oblige to a certain level of a code quality and mandatory refactoring
Speaking about testing tools, tests are written in the same programming language as a code to be tested and there are special frameworks for that.
API tests. API testing is performed by the external team, i.e. the team that is not involved in the development process. It’s aimed at revealing any inconsistencies between the actual and expected features/functionality of a product and usually is run at three levels:
- elementary (are there the methods that are supposed to be?)
- middle (do we have the features we expected to receive?)
- high: testing of positive scenarios (what do we receive if the input is correct?) and testing of negative scenarios (what do we receive if the input is incorrect?)
Speaking about the main advantages of API tests, they allow for the greater control over the development process. This is especially applicable when different teams are working on separate parts of the same product. On top of this, API tests decrease the time needed to find bugs.
As the quality of a final product is of the utmost importance, any additional processes that ensure such quality, especially if performed by an external team, is always beneficial. API testing doesn’t have any explicit downsides and, as a rule of thumb, it’s good to have it on any project.
A test automation tool used for API tests is Codeception.
Interface testing. These tests are basically the comparison of screenshots of a web page. The process is as follows: initial screenshots are made manually -> discrepancies between the initial and latest versions of a web page are covered by interface testing -> if discrepancies are correct, they are accepted as valid; if the discrepancies are incorrect, the errors are fixed.
Interface testing decreases the time needed to create an interface. In addition, the great benefit of these tests is that they do not require any additional actions from HTML coders at the development stage.
A software testing tool used for the interface testing is BackstopJS.
Functional tests. Functional testing is aimed at verifying user’s interaction with a browser. The main benefit of the functional tests is that they cover a significant part of manual work so fewer testers are required for a project and the risk of human error is almost eliminated. There is also one downside, namely — the existing tools currently do not cover all browsers. But, as we see from the practice, the overall result is beneficial either way.
Automated code review. This kind of tests is more about code appearance than about its performance. Automated code reviews verify whether a code complies with some internal standards a development team has. Why you need them for your project? Well, if the style is unified it will be much easier (and, thus, less time and money consuming) to work with a code in the future. And although an automated code review doesn’t replace a manual code review, it significantly reduces the time required to perform the later.
Load testing. Load tests verify how a system performs when many users interact with it simultaneously. This kind of testing is a continuous process meaning that the tests are executed in parallel with software development. Load tests make it possible to predict the limits at which a website will need additional resources to function properly. In addition, they may help determine the maximum number of users a website can support.
Best automation testing tool for load testing is JMeter.
Automation testing in Agile methodology
Since the object to be tested is constantly changing, the concept of test automation in Agile might seem counter-intuitive at the first sight. However, the truth is that a development team cannot efficiently work according to Agile methodology if the tests are not automated.
The reason is that the new functionality is added in each sprint, so the number of test cases grows as well. As the old code has to be also covered by regression testing, it’s naturally that at some point it becomes just impossible to cover everything manually.
You may wonder how it’s even possible to perform automated testing if the circumstances are always changing. Well, it’s indeed a quite complicated process, so a development team should have an excellent expertise to arrange quality assurance process properly (i.e. correctly determine what needs to be automated and in what sequence). Yet, the benefits are worth it, as you can save time and notably increase the quality of a final product.
Automated software testing is especially beneficial for complex development projects: the longer a project lasts, the bigger gain automated tests can bring in the end.
Automated tests obviously cannot solve all problems that may occur during the development process, but if executed properly, they make the work much more efficient and, thus, more cost-effective. As we can see from the practice, implementation of test automation in a project always pays off in the global perspective.