Mapping the Testing Pyramid to Automated Testing Tools

May 7th, 2020

Automated testing tools exist across all parts of the testing pyramid, and it's up to you to decide which parts of your development lifecycle that you want to automate.

The software testing pyramid; end-to-end tests are traditionally the most expensive.

Overview

Automated testing tools are great. They save you time (and money) by automating tasks that you would otherwise perform yourself. Software testing is a mature concept within the broader landscape of software development, so you have tons of options when considering what aspect of testing your web application that you’d like to automate.

Reflect automates testing at the end-user level. That is, Reflect doesn’t test isolated parts of your application code; it tests the full, end-to-end user experience, just like someone using your application in real life. You can certainly create tests in Reflect that only exercise a specific, narrow portion of your web application. But if you want to automate testing below the surface of the end user experience, what are your options for QA tools? We highlight the important components to consider at each level of the testing hierarchy, and include an automation tools list for each.

Unit Testing

Unit testing verifies the correctness of isolated logical units in your application’s source code. They should be fast, and potentially even written before the actual application code. Developers run these tests locally as well as remotely when they are considering deploying changes to the web application. Unit tests often run as part of a continuous integration workflow, where all code changes are tested for correctness as soon as they are considered for review.

The automation tools or frameworks for executing unit tests usually depend on your programming language. The automation tools list includes:

And, as mentioned, these unit tests usually run within a CI framework like:

Integration Testing

Many modern systems use the microservices architecture, where multiple distributed smaller modules, or services, compute independently of each other and share their results over the network. In these deployments, it’s necessary to test how your services interact with each other, and that falls under the realm of Integration Testing.

Generally speaking, an Integration Test is an HTTP request to a REST API endpoint that validates the output from the API endpoint correctly integrates the results from (usually) several internal services that contributed to the result. These tests range from issuing a GET request to a public endpoint to setting cookies and validating an application’s “logged-in” internal endpoints. The HTTP response code and optionally the JSON response body determine the success or failure of the test.

The automation tools list includes:

End-to-End Testing

At the top of the pyramid is end-to-end testing, or Validation Testing. These tests validate the end-user’s experience and, thus, execute within the web browser for web applications since that is how the user interacts with the application. Selenium WebDriver is a language binding and implementation of browser-controlling code. Since its inception, it has been a popular mechanism for programming the validation tests that verify the behavior of a web application in the browser. However, these tests still ultimately rely on the programmer’s knowledge of the application. As such, they are still approximating the end-user’s actions rather than replicating them. Additionally, code-based tools cannot easily support visual assertions directly because the programmer is not actually interacting with the webpage in the browser. A visual assertion allows the tester to validate the application’s appearance.

This is where we believe Reflect is different. Reflect captures user actions within an instrumented, cloud-based browser, and automatically derives a repeatable machine-driven test. As such, it more accurately tests how the application handles its users’ actions without sacrificing speed of execution. Furthermore, it expands the sphere of capable testers from only developers or programmers to anyone in an organization. Lastly, it supports visual assertions with a simple click-and-drag motion over the selected elements.

Conclusion

There are numerous automated options all along the hierarchy of software testing, and you just need to choose which part of your system’s testing that you want to automate. While unit tests are simple and fast, end-to-end tests most closely resemble the experience that your end-user will have. A mix of all types of tests is best. If you would like to learn more about the approach we’re taking to end-to-end tests at Reflect, don’t hesitate to reach out to us at info@reflect.run, or book a demo through our site.

Copyright © 2020 Reflect Software LLC. All Rights Reserved.