Fundamentals of testing microservices architecture

Increased adoption of digital has pushed the need for speed to the forefront. The need to conceptualize, develop, launch new products and iterate to make them better, much ahead of the competition and gain customer mindshare, has become the critical driver of growth. Adoption of agile principles or movement towards scrum teams for increased agility are all steps in this direction. Disruptive changes have also taken place on the application front with the 3-tier architecture of the late 90s and subsequent 2 tier monolithic architecture giving way to one that is based on microservices.

Having a single codebase made a monolithic architecture less risky but slow to adopt changes, the exact opposite of a services-based architecture. Microservices architecture makes it easier for multiple development teams to make changes to the codebase in parallel. By transforming an application into a distributed set of services that are highly independent, yet interdependent, provides the ability to create new services/functionalities and modify services without impacting the overall application. These changes can be achieved by teams cutting across geographies or locations and makes it easier for them to understand functional modules rather than the humongous application codebase. However, the highly distributed nature of services also gives them a heightened ability to fail.

Breaking it down

At the core, a microservices architecture comprises of 3 layers – a REST layer that allows the service to expose APIs, the database layer, and the service layer. A robust testing strategy needs to cover all these layers and ensure that issues are not leaked to production. The further an issue moves across stages, the impact increases on account of multiple teams getting affected. Hence the test plan must cover multiple types of testing like service testing, subsystem testing, client acceptance testing, performance testing, etc. Subsequent paragraphs outline key aspects of service level testing and integration testing in a microservices architecture-based application landscape.

In service level testing, each service forming a part of the application architecture needs to be validated. Each service has dependencies on other services and transmits information to others based on need. In a monolith architecture, since connections are being established from one class to the other within the same Java Virtual machine (JVM), chances of failure are far lower. However, in a services architecture, these are distributed, driving the need for network calls to access other services and makes it more complex.

Functional Validation: The primary goal in services testing is the functionality validation of a service. Key to this is the need to understand all events the service handles through both internal as well as external APIs. At times this calls for simulating certain events to ensure that they are being handled properly by the service. Collaboration with the development team is key to understand incoming events being handled by the service as part of its functionality. A key element of functional validation – API contract testing, tests the request and response payload along with a host of areas like pagination and sorting behaviors, metadata, etc.

Compatibility: Another important aspect is recognizing and negating backward compatibility issues. This happens during the launch of a changed version of the service that breaks existing clients running in production. Changes that happen to API contracts need to be evaluated in detail to understand if they are mandatory and capable of breaking clients in production. An addition of a new attribute or a parameter may not classify as a breaking change; however, changes to response payload, behavior, error codes, or datatypes have the ability to break. A change in value typically changes the logic behind it as well. They need to be uncovered much earlier in the service testing lifecycle.

Dependencies: Another aspect of focus is external dependencies, where one would test both incoming as well as outgoing API calls. Since these are heavily dependent on the availability of other services and hence other teams, there is a strong need to obviate dependency through the usage of mocks. Having conversations with developers and getting them to insert mocks while creating individual services will enable testing dependencies without waiting for the service to be available. It is imperative to make sure the mocks are easily configurable without needing access to the codebase. Usage of mocks also drives ease in automation giving teams the ability to run independently with no configuration.

Bringing it all together

Once each service is tested for its functionality, the next step is to move onto validate how the various collaborating services work together end to end. Known as subsystem testing or integration testing, it tests the whole functionality exposed together. Understanding the architecture or application blueprint by discussions with the development team is paramount in this stage. Further, there is a strong need to use real services deployed in the integration environment rather than mocks used for external dependencies.

As part of integration testing, there is a need to validate if the services are wired very closely and talking to each other. The event stream and inter-service API calls need to be configured properly so inter-service communication channels are proper. If the service functionality level testing is proper, the chances of finding errors are minimal in this stage, since the required mocks created in the functionality testing stage would have ensured that the services function properly.

Looking in-depth, we find that the testing strategies for microservices are not extremely different from those adopted for a monolith application architecture. The fundamental difference comes in the way the interdependencies and communication between multiple services forming a part of the larger application are tested to ensure that the application as a whole function in line with expectations.

Trigent excels in delivering Digital Transformation Services: GoodFirms

GoodFirms consists of researched companies and their reviews from genuine, authorized service-buyers across the IT industry. Furthermore, the companies are examined on crucial parameters of Quality, Reliability, and Ability and ranked based on the same. This factor helps customers to choose and hire companies by bridging the gap between the two.

They recently evaluated Trigent based on the same parameters, after which they found the firm excels in delivering IT Services, mainly:


Keeping Up with Latest Technology Through Cloud computing

Cloud computing technology has made the process of meeting the changing demands of clients and customers. The companies who are early adopters of the changing technologies always achieve cutting-edge in the market. Trigent’s cloud-first strategy is made to meet the clients’ needs by driving acceleration, customer insight, and connected experience to take businesses to the next orbit of cloud transformation. Their team exhibits the highest potential in cloud computing that improves business results across the key performance indicators (KPIs). The Trigent team is instilled with productivity, operational efficiency, and growth that increases profitability.

The team possesses years of experience and works attentively in the cloud adoption journey of their clients. The professionals curate all their knowledge to bring the best of services to the table. This way, the clients can seamlessly achieve goals and secure their place as a modern cloud based-enterprise. Their vigorous effort has placed them as the top cloud companies in Bangalore at GoodFirms website.

Propelling Business with Software Testing

Continuous efforts and innovations are essential for businesses to outpace in the competitive market. The Trigent team offers next-gen software testing services to warrant the delivery of superior quality software products that are release ready. The team uses agile – continuous integration, continuous deployment – and shift-left approaches by utilizing validated, automated tools. The team expertise covers functional, security, performance, usability, accessibility testing that extends across mobile, web, cloud, and microservices deployment.

The company caters to clients of all sizes across different industries. The clients have also sustained substantial growth by harnessing their decade-long experience and domain-knowledge. Bridging the gap between companies and customers and using agile methodology for test advisory & consulting, test automation, accessibility assurance, security testing, end to end functional testing, performance testing the company holds expertise in all. Thus, the company is dubbed as the top software testing company in Massachusetts at GoodFirms.

Optimizing Work with Artificial Intelligence

Artificial intelligence has been the emerging technology for many industries during the past decade. AI is defining technology by taking it to a whole new level of automation where machine learning, natural language process, and neural networks are used to deliver solutions. At Trigent, the team promises to support clients by utilizing AI and providing faster, more effective outcomes. By serving diverse industries with complete AI operating models – strategy, design, development, and execution – the firm is automating tasks. They are focused on empowering brands by adding machine capabilities to human intelligence and simplifying operations.

The AI development teams at Trigent are appropriately applying the resources to identify and govern a process that empowers and innovate business intelligence. Besides, with their help with continuous processes enhancements and AI feedback systems, many companies have been increasing productivity and revenues. Therefore, helping clients to earn profit with artificial intelligence, the firm would soon rank in the list of the artificial intelligence programming company at GoodFirms.

About GoodFirms

GoodFirms, a maverick B2B Research and Reviews Company helps in finding Cloud Computing, Testing Services, and Artificial Intelligence firms rendering the best services to its customers. Their  extensive research process ranks the companies, boosts their online reputation and helps service seekers pick the right technology partner that meets their business needs.

Can Machine Learning Power the Future of Software Testing?

Machine learning in software testing

Software testing professionals today are under immense pressure to make faster risk-based, go-live decisions, what with DevOps practices having shrunk the time to deliver test results. What was expected every two weeks is now expected umpteen times in a day.

The job of a tester has also become more demanding due to increasing complexities in applications. Testers are now expected to deliver a go/no go decision that compliments fast-paced development and deployment.

A recent piece announcing the launch of a data-driven ML-powered engine to assist testers sounds promising, but will it deliver on the promise?

Kawaguchi’s reasoning behind his new venture is based on the way different industries have benefited by using data to drive processes and efficiencies. He opines that the same can be replicated in the software industry, specifically to the practice of software testing.

Through Launchable, Kawaguchi plans to utilize machine learning to help provide quantifiable indicators that help testers perform risk-based testing and get a clear understanding of the quality and impact of the software when ready for deployment.

A machine learning engine is expected to predict test cases that could fail due to changes in the source code. Knowing in advance about test cases that are poised for failure would allow testers to run a subset of tests in an order that would minimize the feedback delay.

Our view on the use of machine learning in software testing

As testers, skeptics we are!!

Whilst there is no doubt that time to deliver has become a significant constraint for testers and automation helps to speed things up, the selection of tests to automate is still an expert-driven process.

When the quantum of changes are small and changes localized, we may probably be able to have an AI algorithm, that through a reduced set of features, can arrive at an intelligent risk assessment.

However, as testers, we have also seen that a small quantum of changes can result in a large regression impact. In this case, the feature set we may need to assess may be insufficient.

What if the quantum of change is large. The features that the algorithm needs to consider may not be limited to code alone, but also depend on a lot of external factors, including business considerations to drive the test focus decision. That makes the data points required for decision making, sizable.

To date, the ability of AI to replace human instinct and interplay is yet to be proven!

Until such a time, that one understands the features considered to assess risk. The biases that the algorithm may have absorbed while being trained. And that AI can replace critical thinking is proven – this will be one more output that will need to get assessed for the possible risk it can pose to the decision-making process.

Kosuke Kawaguchi is confident about his approach. That’s the claim he made when he announced the launch of his startup. We have eagerly signed up for a beta here, and will keenly observe the impact that these set of AI algorithms have on software testing.

Here’s to more innovations in this sphere!!

Learn more about Trigent software testing services or functional testing services.

The What, When & Why of Mobile Interrupt Testing

Read an overview of mobile app testing.

Mobile Interrupt Testing is a form of mobile application testing that deals with the behavior of an application when it is interrupted in the foreground and resumes to a state before the interruption.

Interrupt Testing, on the other hand, applies to any application type, i.e. web, mobile, stand-alone, etc. However, the variety of devices, networks, configurations, etc. makes this form of testing appropriate for mobile applications.

What is Mobile Interrupt Testing?

We all have our daily interruptions in day-to-day life. Consider a real-life example of being interrupted by a call when reading a newspaper. Some of us may notice the call, ignore it and continue to read the paper, some see the call, acknowledge it, and continue reading, a few more might attend the call, and then resume reading the paper. However, in all the above instances, one’s thought process when reading the paper has been interrupted or lost. To translate this to mobile technology, Interrupt Testing tries to find out which behavior your application exhibits when an interruption occurs.

Given below are a few examples of interruptions in smartphones:

  • Battery low
  • Battery full – when charging
  • Incoming phone call
  • Incoming SMS
  • Incoming alert/push notification from another mobile application
  • Plugged in for charging
  • Plugged out from charging
  • Device shut off
  • Application update reminders
  • Alarm or calendar reminders
  • Network connection loss
  • Network connection restoration

This list is not exhaustive and only includes the most common scenarios.

Before we move on let us understand the phrases, ‘application running in the foreground’ and ‘application running in the background’.

The application running in the foreground is the app on which the user has direct control and which will be seen on the smartphone screen.

Background applications are those apps running on the smartphone but on which the user will not have direct control until it is brought to the foreground. Apps running in the background are expected to resume to the last controlled screen/action when called to the foreground.

Usually, an app goes to the background when we open multiple apps and then we toggle between apps based on our need without closing/quitting the app. The app which is in the background will be using the memory of the phone till it is quit by killing.

The application needs to handle the interruptions adequately to meet user requirements. The expected behavior of an app for these interruptions might resemble the following:

  1. Run in the background: The interruption takes over while the application goes to the background. It gains control after the interruption ends. For example, A phone/WhatsApp/Skype call that you attend while you are reading/playing a game on the smartphone. When the call ends the game or the activity you were involved with, should resume to the state it was in, before the interruption.
  2. Show alert. Alert disappears, and you work as usual. ‘SMS received’- messages appear in the header. The user does not bother about it and continues working with the application as normal. Other mobile app alerts, such as a new friend request on Facebook or WhatsApp messages, also fall into this category. But if the user decides to read the message, the behavior described in Point 1 is followed. If ignored, the application’s state is unchanged.
  3. Call to Action: Alarms have to be turned off or snoozed before you continue working. The same thing applies to app update messages. You either have to ‘Cancel’ or ‘Accept’ the changes before you proceed. Another example is that of the low battery alert – You can choose to continue as usual or go into a low power mode (if the device allows it).
  4. No impact: An example is: if a network connection becomes available and your device connects to it. Also, when you plug your device in for charging, no alert or call to action step is necessary. It will probably do its job while you continue using your application.

Thus, depending on the interruption you are testing for, understand the behavior, and see if your application satisfies it.

Also, the behaviors described above need not be the same for all applications and devices. Be sure to find out specific details about your particular Mobile App.

Now that we understand what Interrupt Testing is and what to validate when conducting it, it is time to talk about how to do it.

How to Conduct Mobile Interrupt Testing

Look at this scenario: Google Chrome or any browser app for that matter has to run in the background when the user receives an incoming phone call.

Would you not call this a functional requirement of the google chrome app? I know, I would.

So, Interrupt Testing is a subset of Mobile Application Functional Testing. And, to conduct Interrupt Testing, you would follow the same Mobile Application Test Frameworks and Tools. It is the skill of the tester to conceive these scenarios. Once done, you would design the test cases and execute them in the same way as any other test. And do not get confused with the interrupt testing with the recovery testing. The recovery Test is to validate the restoration from a failure. Interrupt Testing is not necessarily a failure. It is a mere distraction.

The need for interrupt testing with various scenarios is very much necessary in this mobile app enriched world where competition between similar apps is at its peak. The best app with excellent usability is always talked about, referred to, and chosen by users.

Need help with your mobile application testing requirements? Trigent’s experienced quality assurance and testing team ensure your product is market-ready within stipulated timelines.

Infographic – Business Acceptance Testing – Making Products Future Proof!


QA-Business Acceptance Testing(BAT)

Unlike UAT testing (User Acceptance Testing) and UT (User Testing) which revolve around functionalities specific to users, BAT(Business Acceptance Testing) on the other hand, focuses on the business value of software testing i.e Product Marketing, Concept, Users Preferences and ease of Use.

BAT (Business acceptance Testing) plays a critical role in validating that all the business requirements are fulfilled before the release of the software in the market.

Here’s an info graphic that will give you a glance of when are the BAT Tests created; how it begins and how it benefits businesses. Download full Whitepaper Business Acceptance Testing

“G11N” Testing– A key aspect of Software Product Testing

Interview with a Testing/QA Manager at Trigent

“G11N” or Globalization testing is more relevant today than it was earlier and is a key aspect of software product testing. For one, to increase their market base, companies are increasingly targeting global customers tailoring features and functionality to meet user standards and formats of a particular geography. This includes preferences like platforms, browsers, language settings, currency, etc. Testing different combinations of the above elements become mission-critical.

Globalization testing also means ensuring software products have relevant features and functionality to establish connect with the geographically dispersed users. It would be apt to describe Globalization testing as a process to ensure the software can run independently of its geographical and cultural environment.

I asked our Associate Test Manager, “What are the key components of Globalization testing and what are the most left out aspects or minute details one has to bear in mind for globalization testing?”

Here’s what Mr. Ashwin replied:

“There are a lot of aspects that must be considered when producing a global software. Some of the aspects are as follows:

• Locale/Language/Vocabulary Sensitivity

• Format

– Date and time

– Currency handling

– Address and telephone number

• Default Size of Paper for printing

Apart from usual elements tested like platforms, cross-browser compatibility, language settings, translation capabilities, etc.”

I asked how was he able to minutely define such details which are often missed out in Globalization testing. He replied –

“One gets to know about various nuances of Globalization testing or for that matter another testing when one works for a particular case and the level he drills into. In our case, we had a chance to perform globalization testing for a web-based product involved in an online transaction using 25 different currencies. Also, product testing was done to ensure that mobile users in 70 countries can recharge their currency and perform money transfer without any problem across countries.”

Mr. Ashwin also suggested some of the best practices while performing Globalization Testing as follows:

Step1: Analyze the globalization requirements in detail like the culture, standards etc.

Step 2: Ensure application seamlessly integrates with the locale/language

Step 3: Ensure application and database are able to capture and store all special characters, italics, accentuated character sets specific to the language to be supported

Step 4: Ensure there is proper formatting of dates, currencies etc. as applicable

Step 5: Ensure proper conversion rates as applicable in case of currencies

Globalization testing aims to make sure acceptability, usability and reliability of a product are intact in keeping with global audiences in mind. As a service provider, more and more software testing companies are gearing to strengthen their support to meet global user experience.

I had an insightful session with Mr. Ashwin yesterday. If you have any queries or if you want to know more about how our software product testing services can help you, don’t hesitate to call us or drop a line.

Read Other Blog on Localization Testing:

Points to Remember When Performing Localization Testing

Embed Software Product Testing in your DNA

As software product development is getting complex with the demand for breakthrough features and functionalities, software testing techniques are getting even more complex. The introduction of new features opens the door for many test case scenarios. Besides, there are various combinations of platforms, browsers, and devices that need to be tested for each scenario.

We know software product testing is not a new fad; it has seen its fair share of transition from manual testing to test automation and likewise testing tools have also evolved. However, as the market is abuzz with innovative products and platforms, businesses are constantly slogging to be front runners in efficiency and customer experience. Testing is no longer a ritual but a market readiness strategy for any respectable product or application.

New age start-ups have taken the market by storm, as the demand to release quality products faster has become increasingly important. Delay in launch of a product and you succumb to laggard status, while a minor defect and you invite customers and social media scalpel.

Given the demand and shift towards high-quality standards, a large number of software testing companies in India are investing time and money to improve customer experience and satisfaction. Be it a cloud platform or on-premise platform, Software product testing companies make use of the latest technologies and tools to get insights and feedback about the quality of their product. You can embed product testing either as an extension to your internal team or engage an independent validator whose approach would be structured and unbiased.

Outsourcing software product testing

The best strategy to address software product testing is to engage an offshore independent testing vendor. It would not only provide an independent eye but also reduce investments in terms of resource utilization. Other benefits would include greater return on quality assurance, augmented efficiency, flexibility, and minimized revenue cycle.

Before outsourcing your projects to software performance testing companies, do thorough research to see if the company has the required skills, experience, and expertise. It is important to find the right vendor with the right profiling in the performance testing strategy, as it would help your company optimize products and meet the high-quality standards of today’s demanding customers.