In the past, software development and testing were very linear: applications were designed and developed in a monolithic fashion, and testing was only done after the software developers declared they were 'done'. Software testing then mostly was done from an end-user perspective, using the graphical user interface (GUI) of a system to interact with it and try and find any bugs.
When test automation started to arise and become more popular, that too often leveraged the GUI through simulation of the clicks and keystrokes that a tester would do when they interacted with the software under test.
Since then, software has changed. A lot. Most new applications are not monolithic in nature anymore, but rather much more distributed: built out of dozens or even hundreds of components, layers and subsystems that are developed in parallel in different teams, departments and even across organizations. This means there is much more potential and need for testing individual components (and their interaction) before the entire system is ready.
Often, the components that make up a distributed system exchange data through APIs, and these APIs form a natural boundary between a system and their adjoining components (dependencies). For example, frontends of modern web applications use an API, or rather several APIs, to send data to and retrieve data from a backend system. And microservices-based systems, constructed from dozens or even hundreds of independently developed and loosely coupled components (services), see an even heavier use of APIs to exchange data between all of these components.
To ensure that each of these components work as expected, knowing what to test for and how to test at the API level is rapidly becoming an indispensable skill for every software tester. Knowing how to design and perform tests at the API level as a tester helps you give important information about the quality of a product, or a component thereof, at an early stage in the development process, long before all components are integrated.
Also, these APIs open up a lot of opportunities to further support your testing and automation activities. Mocking third-party components at the API level to isolate the component you want to test from external behaviour, for example. Or using APIs to rapidly create test data in a system to prepare for an exploratory testing session. The options to leverage APIs to increase the efficiency of your testing and automation are plenty.
Being able to use all of these opportunities to full effect, though, does require some additional skills from you as a software tester. In the next blog post, we'll take a closer look at the different ways in which the ability to work with and test APIs can support your overall testing efforts.
Knowing how to approach testing APIs and API-driven systems is an indispensable skill for any modern software tester. Learn API Testing and Automation at the Inspired Academy