• Skip to main content
  • Skip to footer

InRhythm

Your partners in accelerated digital transformation

  • Who We Are
  • Our Work
  • Our Culture
  • Events
  • Testimonials
  • Blog
  • Contact Us

Java Engineering

Apr 03 2020

Creating Robust Test Automation for Microservices

Any and all projects that a software engineer joins will come in one of two forms: greenfield or legacy codebases. In the majority of cases, projects will fall into the realm of the legacy repositories. As a software engineer, it is our responsibility to be able to strategically navigate our way through either type of project by looking objectively at the opportunities to improve the code base, lower the cognitive load for software engineering and make a determination to advise on better design strategies. But, chances are, there is a problem. Before architecture or design refactors can be taken its best to take a pulse on the health of your platform End to End (E2E). The reason being, lurking in a new or existing platform is likely a common ailment of a modern microservices approach – the inability to test the platform E2E across microservices that are, by design, commonly engineered by different teams over time.

I recently worked on a greenfield platform and nearly 6 months into the project, one of the most critical parts of the project had fallen several months behind from a quality assurance perspective. It was no longer possible for QA to catch up, nor was it possible for QA to engineer and execute E2E testing to complete common user journeys throughout the enterprise system. To solve this conundrum, E2E data generation tools needed to be created so that the QA team could keep upbuilding and testing every scenario and edge case. As I see it, there are three main requirements for an E2E account and data generation tool. The tool should:

1) Create test accounts with mock data for each microservice

2) Link those accounts between up and downs stream microservices

3) Provide easy to access APIs that are self-documenting 

Using a tool like Swagger, QA can use the API description for REST API, i.e. OpenAPI Specification (formerly Swagger Specification) to view the available endpoints and operations to create accounts, generate test data, authenticate, authorize and “connect the microservices”.

By creating tools for E2E testing, our QA team was able to eliminate the hassle of trying to figure out which upstream and downstream microservices needed to be called to ensure that the required accounts and data were available and set up properly to ensure a successful test of all scenarios i.e. based upon the variety of different data types, user permissions, user information and also covering the negative test cases. The QA team was able to catch up and write their entire suite of test scenarios generating the matching accounts and data to satisfy those requirements. The net result of having built an E2E test generation tool was automated tests could be produced exponentially quicker and the tests themselves are more resilient to failure. 

Even though the microservices pattern continues to gain traction, developing E2E testing tools that generate accounts and test data across an enterprise platform will likely still remain a pain point. That having been said, the purpose of this article is to raise awareness. Software Engineering Leadership has an opportunity to step up and ensure that the enterprise system that they look after is healthy E2E. I can’t think of a better way to maintain a healthy system than to ensure accounts and data in the lower environments actually work and unblock testing end-to-end. 

James Woods, Web Engineering Practice Lead

Written by James Woods · Categorized: Agile & Lean, Cloud Engineering, Code Lounge, InRhythm News, Java Engineering, Learning and Development, Newsletters, Product Development, Software Engineering · Tagged: microservices, testing

Feb 07 2019

InRhythm’s Cloud Engineering Digest: New Year, New Java News

January is a quiet month for releases and breaking news, but it’s usually full of great summaries and articles. For our first Cloud Engineering Digest of 2019, we round up the links and articles you need to see.

New year, new GitHub: GitHub Launches Free Private Repos with up to Three Collaborators

New year, new GitHub: Announcing unlimited free private repos and unified Enterprise offering

IBM Releases Open Liberty 18.0.0.4 with Support for MicroProfile 2.1 and Reactive Extensions
Open Liberty is a production-ready implementation of the MicroProfile specifications
You can read more about Eclipse MicroProfile here.

Raw String Literals have been removed from Java 12 scope.
A raw string literal can span multiple lines of source code and does not interpret escape sequences, such as \n, or Unicode escapes of the form \uXXXX.
Owner Brian Goetz offers an explanation here, and you can see the official feature description here.

Google Announces Spring Cloud GCP 1.1 collaboration between Pivotal’s Spring team and Google to integrate the Spring Framework and Google Cloud Platform (GCP). The project joins the Spring Cloud release train and is now compatible with Spring Boot 2.1 and Java 11, and includes all the goodness of the most recent Spring Boot version.

IntelliJ IDEA 2019.1 Early Access Program is open.
You can see major upcoming features ahead, including Gradle improvements, Spring Cloud Stream refinements, and more.

Spring Boot 2.1.2 released

90 New Features (and APIs) in JDK 11
Since JDK 12 is coming soon, this is a good recap of all the new features released in JDK 11.

Architecture

Developing Microservices with Behavior-Driven Development and Interface-Oriented Design
A good article that explains BDD (behavior-driven development) on a simple sample.

Further Reading

Netflix Play API: Building an Evolutionary Architecture
Great article about architecture changes in Netflix in response to key business milestones for growth.

GraalVM in 2018
High-performance polyglot VM with a new high-performance Java compiler, itself called Graal, which can be used in just-in-time or ahead-of-time configurations.

An Introduction to Kotlin for Serverside Java Developers
A straightforward intro to Kotlin, a newer language on the JVM, making the case for why it works and where it works best.

Share your thoughts—and what you’re reading—with us in the comments below or @GetInRhythm on Twitter.

Written by Nick Logvynenko · Categorized: Cloud Engineering, InRhythm News, InRhythmU, Java Engineering, Newsletters · Tagged: APIs, cloud newsletter, Graal, java newsletter, Kotlin, Learning, link digest, Spring Boot, updates

Footer

Interested in learning more?
Connect with Us
InRhythm

140 Broadway
Suite 2270
New York, NY 10005

1 800 683 7813
get@inrhythm.com

Copyright © 2021 · InRhythm on Genesis Framework · WordPress · Log in

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Cookie settingsACCEPT
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.

Necessary Always Enabled

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Non-necessary

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.