Why Software Test Engineers should know about Cloud Computing?
Tags: aws, awscommunity, awscloud
Published: 2020-11-20 14:25:16

In the article, I will explain from my point of view why Software Test Engineers should know about Cloud Computing.

Let's assume that I joined recently a new company and they have a large-scale business application hosted on the cloud, for example, let's say on AWS (Amazon Web Services).

In one of our meetings, they said that they need to focus on Load and Performance testing in the next quarter.

Then at this moment, I raised my hand and said: Ok Guys I'm the man for this task, I'm a test automation engineer and I can do it easily.

They said: Great! so Moataz let's focus more on our testing strategy about the Fault Tolerance, High Availability, Disaster Recovery to check our Load Balancing approach.

I said: **What ????!! Fault Tolerance? High Availability? Disaster Recovery? Load Balance?**

What you are saying guys, I don't understand anything! :D :D

And here I figured out that there is a different approach to handle the load and performance testing on the could. And seems that I need to add a new skill to my testing skills.

In another meeting, we decided that we will start working on mobile test automation but the manager said that: Guys we don't have many devices here to test our application and we should use AWS Device Farm to run our UI tests.

And again I lost what is AWS Device Farm? is this a mobile device somewhere or we will buy it afterward?

Here I decided that I need to start learning about Cloud Computing in general and AWS to be able to use the cloud services in my daily work and help my team to achieve this goal.

## So what is Cloud computing?
Cloud computing is the on-demand delivery of IT resources over the Internet with a **pay-as-you-go** pricing model.

Instead of buying, owning, and maintaining physical data centers and servers, you can access technology services, such as computing power, storage, and databases, on an as-needed basis from a cloud provider like Amazon Web Services (AWS).

Actually, when we are moving to cloud computing we are aiming to do the following 3 things:

- High Availability
- Fault Tolerance
- Disaster Recovery

## What is High Availability?
A High Availability system is one that is designed to be available 99.99% of the time, or as close to it as possible. Usually, this means configuring a failover system that can handle the same workloads as the primary system.

## What is Fault Tolerance?
Fault tolerance is designed to minimize downtime. A fault-tolerant system is designed to enable the system to continue operating even if one of its components goes down.

## What is Disaster Recovery?
 Disaster Recovery is a complete plan to recover critical business systems and normal operations in the event of a catastrophic disaster like a major weather event or any other cause of significant downtime.

## And finally what is the Load Balancing?
We are using Load Balancer for distributing the network traffic between machines or servers to improve the scalability of our applications.

Now we understand the benefits behind Cloud Computing, but what about AWS?.

## Cloud computing with AWS
Amazon Web Services (AWS) is the world’s most comprehensive and broadly adopted cloud platform, offering over 175 fully-featured services from data centers globally. Millions of customers including the fastest-growing startups, largest enterprises, and leading government agencies are using AWS to lower costs, become more agile, and innovate faster.

Source: https://aws.amazon.com/what-is-cloud-computing/?nc1=f_cc

Usually, we are using different AWS services together to implement a solution or an architecture for example if we need to design a Distributed Load Testing Solution on AWS we can use the following diagram:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/gqk1vlwhkuyljbjdx1n6.png)

The Distributed Load Testing on AWS solution automatically launches and configures the applications inside containers running using one of the services like [AWS Fargate](https://aws.amazon.com/fargate/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc&fargate-blogs.sort-by=item.additionalFields.createdDate&fargate-blogs.sort-order=desc) to help you easily create and simulate thousands of connected users generating a select number of transactions per second without having to provision servers. And here we are using [Taurus](https://gettaurus.org/) as a load testing tool and running the solution with [AWS CodePipeline](https://aws.amazon.com/codepipeline/) (our CI/CD pipeline) and [AWS CodeBuild](https://aws.amazon.com/codebuild/)

**And for sure you can design or implement your own architecture with AWS**

To know more about the project you can check this link:

https://github.com/awslabs/distributed-load-testing-on-aws

## And now it's time to know what is AWS Device Farm?
AWS Device Farm is an application testing service that lets you improve the quality of your web and mobile apps by testing them across an extensive range of desktop browsers and real mobile devices; without having to provision and manage any testing infrastructure.

The service enables you to run your tests concurrently on multiple desktop browsers or real devices to speed up the execution of your test suite and generates videos and logs to help you quickly identify issues with your app.

Source: https://aws.amazon.com/device-farm/

Want to try more with AWS? you can create your free tier account from this link:

https://portal.aws.amazon.com/billing/signup

In the end, Cloud Computing helps us to improve our application stability, efficiency, and scalability.

I learned about Cloud Computing and AWS and I added a new skill to me that will help me in the future.

Thank you and Happy learning!

Moataz