Microservices have the industry buzzing. Why? Think faster release cycles, the ability to take services on-and offline without affecting the entire application, and the agility to actually keep up with customer demand.
There’s no denying that the architecture is pretty great–but like all good things, the transition requires some leg work. Specifically, the complexities of the architecture can make testing a bit more complicated.
To get your testing team up to speed–we have put together an introduction to testing in microservices.
Welcome to Microservices Testing 101.
Missed the prerequisite? No worries, our post Going From Monolith to Microservices is a great place to start!
Lesson 1: Differences Between Testing Microservices Applications Verses Monolith
Microservice architectures are significantly more complex than monoliths. As such, a microservices testing strategy needs to be well-rounded and requires multiple testing skills.
There are three key differences between a monolith and microservices application that affect your testing strategy:
- Interconnectivity: A microservices application can have hundreds of individual services spread across different machines, servers, cloud services, etc. For the application to work, these services must synchronously communicate across the network.
- Independent Services: Each microservice needs to be independent, focus on a single business goal, and leverage a different technology stack. This allows individual services to be replaced, managed, or deployed without affecting the entire system.
- Concurrency: Concurrency in a microservices is usually handled by scaling the microservice instances.
Additionally, because different services might be written in different coding languages, testers must build automation frameworks that coincide with the different languages. Testers should also understand API testing, performance testing, and the security needs of the architecture.
Lesson 2: Challenges to Testing in Microservices
With the complexity of the architecture, there are bound to be some unique challenges to testing the platform:
- Services Dependency – As you may remember from our post 7 Major Mistakes to Avoid When Moving to Microservices, microservices should not be tightly coupled. However because of the cost of data replication and latency networks, sometimes it makes sense to have services call upon one other. While the justification for dependency should be taken on a case by case basis, one thing to keep in mind is that service dependency makes for more complicated testing.
- Failover Handling – When a service or application fails or is switched over from one server to another, it is important that the system remains live and functional. For truly independent services, a single service failure should theoretically only affect that service. However, since services will often depend on one another, it is important that proper failover logic is put in place to prevent multiple services from going down at the fault of a single service.
- Data Migration – One of the most important things to consider when testing in microservices is data migration or synchronization. Think about how to deal with lost or bad data that stems from data migration.
- Network Latency – As we mentioned in the first challenge because individual services will need to call on data from other places, network latency can be a problem for microservices architectures. As such, it is important to ensure testing covers network latency as well.
- API Documentation – To perform effective contract testing, live API documentation needs to be kept up-to-date. However, this type of testing can prove challenging because it requires commitment from the development team to ensure the documentation is updated.
- Automation Coverage – Microservice architecture allows for rapid and continuous deployment of new features. To prevent testing from becoming a bottleneck, testers must strategically automate testing to speed up the process and extend coverage as much as possible.
- End to End Testing – end-to-end testing for a microservices application tends to take a lot of time and can slow down deployment. Additionally, bugs found during end-to-end testing can be very expensive to fix. Therefore, it is important, albeit challenging, to define a comprehensive end-to-end flow that does not take as long to execute.
Alright class, that is enough for today. BUT, our course is not over yet! Stay tuned for part 2 where we will go over factors to consider and the tests and tools needed to testing in microservices.