How to test internal microservices in a kubernetes cluster

Hello guys, I have been working with kubernetes, docker, postman and newman a lot lately due some tests on internal microservices. To test these internal microservices I am running postman scripts in the same kubernetes cluster where the services are running.

Kubernetes is an open source container orchestrator, which means you can group together all the containers (services) that share information. You don’t need to expose their endpoints for them to be available among themselves. PS: This is just my brief explanation, but feel free to explore a bit more.

To be able to run tests on internal microservices that are inside a Kubernetes cluster I created a Postman collection and together with Newman run the tests pointing to these services without the need to expose the endpoints.

Creating the postman script

– You will need to have postman installed to create the script

– I am not going through the details of this part, because this is not the aim of this post, but after you create the script on postman you will need to export to api/collections folder.

– Also, you will need to export the environment variables that you create it and save it in the api/envs folder.

– You can see an example of the collection here and an example of the environment variable here. Remember that the hostname needs to be the name of the deployment of your service in kubernetes.

Creating the docker file

– I am using this docker image as base, but you can use any other, you just need to install newman.

– Then we need to build a Docker image containing the postman collection, environment and global variables, data files, etc.

– After this we need to create a jenkins file that will build and push the image to the docker hub, the best practice is you to have a separate pipeline just to build the image (so the tests contains just the tests and don’t take longer than necessary to run), but in this example I am going to have just a separate stage to build the image and another to run the tests.

dockerfile:

FROM postman/newman
WORKDIR /etc/newman/
COPY . /etc/newman/
RUN chmod -R 700 /etc/newman

Creating the kubernetes deployment

– Now we need to create the jenkins file to build and push the docker image to docker hub.

– You can get the full code here.

– But this is the important part, the command below will create a kubernetes deployment in the namespace and run the tests from the image that we have just pushed.

kubectl run microservices-tests -i --rm --namespace=${ENVIRONMENT} --restart=Never --image=${IMAGE}:latest --image-pull-policy=Always -- run /etc/newman/api/collections/collection.postman_collection.json -e /etc/newman/api/envs/${ENVIRONMENT}.postman_environment.json --reporters cli --reporter-cli-no-failures

  • microservices-tests is the name of the deployment that you are going to create.
  • -i Keep stdin open on the container.
  • --rm is the argument that says to delete this deployment once the command is finished.
  • --namespace=${ENVIRONMENT} is the name of the namespace (environment) that you will run this deployment, so it needs to be the same as your services are running.
  • --restart=Never is the argument that says to not restart the deployment once is finished. You don’t want your tests running over and over again forever.
  • --image=${IMAGE}:latest is the image that kubernetes is going to pull.
  • --image-pull-policy=Always this is to ensure that kubernetes is always pull the image even thought you have pulled before (this is to ensure you have always the latest).
  • -- this is to mark the end of the kubernetes commands and everything after is going to be the newman commands/arguments to run the postman script.

So, creating this deployment in the same namespace of your internal services, you can hit them and test the endpoints even though they are not external.

You should see something like this on your console:

This means that your script is running as expected in the cluster.

Thank you guys ! See you next time !

Chaos Engineering: Why Breaking Things Should be Practiced

Hello guys,

Last week I went to the WebSummit 2018 Conference in Lisbon and I managed to join some of the AWS talks. The talk that I am posting today is about chaos engineering, which specifically address the uncertainty of distributed systems at scale. The aim of this practice is to uncover the system weakness and build confidence in the system’s capability. 

The harder it is to disrupt the steady state, the more confidence we have in the behavior of the system.  If a weakness is uncovered, we now have a target for improvement before that behavior manifests in the system at large.

Today I am going to post the video on the exact moment that this talk starts.

https://player.twitch.tv/?autoplay=false&t=02h05m17s&video=v333130731

This talk is presented by AWS Technical Evangelist Adrian Hornsby.

You can find tools to help you with the tests in this repo:

https://github.com/dastergon/awesome-chaos-engineering#notable-tools

 

References:

https://principlesofchaos.org/

https://www.twitch.tv/videos/333130731

Amazing repo with content/links about the topic: https://github.com/dastergon/awesome-chaos-engineering

How do you help developers to test ?

Hello guys,

I have joined to some webinars from Test Masters Online, not sure if you heard about them, but this one really called my attention. The title looks a bit extreme, but you will see that is more about how testers and developers can work together to improve the quality of the team. The ideal is to have specialised QAs that can teach developers about automation, performance, security tests and so on. It is more about giving awareness about tests when developing.

The challenge nowadays is changing the developers mindset to contribute along with QAs with the automation tests and also getting support from the managers (which is something that I’ve always highlighted). If you want a team without a bottleneck and where everybody is max contributing for the quality and speed of the deliveries, then yes you need to think about a team sharing all the responsabilities and having a specilised person to guide and teach.

Basically you will see how Joel Montvelisky discusses the issues which prevents software developers to test, and what testers can do to change that.

Thank you !! See you in the next post 🙂

Cypress with Galen Study Project

Hello peeps,

Today I am going to post a study project that I have created to try Cypress and Galen. As some of you know Cypress doesn’t support cross browser testing at the moment. This is because the creators believe that nowadays you don’t really need to do functional tests on all the browsers, so what they suggest is to create an automation project for the functionality and run on only one browser and then create another project to run the layout tests on the other browsers.

I kind agree with this statement, since most of the bugs that I have found in my latest projects are layout bugs and doesn’t affect the funcionality of the feature. I say most of the bugs, because I can remember one or two situations where the layout issue affected the functionality. Eg.: Imagine there is a menu that shows a list of options when the mouse is over it. You could have an issue with the css, where this list is overridden by a div and the options are not displayed and clickable.

To give it a go on this idea, I have created a project doing functional tests with Cypress and layout tests with Galen.

The link to the project is here: https://github.com/rafaelaazevedo/bug-free-garbanzo

As always feel free to fork and improve the code, share ideas, fix bugs, etc…

I am still fixing the Docker image to integrate the Cypress and the Galen tests in the same container. For now you can run the tests in the Cypress docker container.

See you next time 🙂

How to measure exploratory tests ?

Hello guys,

Many people that are not from the QA area doesn’t know how to measure or what are the advantages of doing exploratory tests, but it is a technique really powerful when used correctly. Its effectiveness depends on several intangibles: the skill of the tester, their intuition, their experience, and their ability to follow hunches.

 

Value

  • detects subtle or complex bugs in a system (that are not detected in targeted testing)
  • provides user-oriented feedback to the team

Exploratory testing aims to find new and undiscovered problems. It contrasts with other more prescribed methods of testing, such as test automation, which aims to show scripted tests can complete successfully without defects. It will help you write new automated tests to ensure that problems aren’t repeated.

If you have any doubs about Exploratory tests, like examples and what are the advantages of doing it, have a look on the video below first:

99 Second Introduction to Exploratory Testing | MoT

 

When should you perform exploratory tests

Exploratory testing works best on a system that has enough functionality for you to interact with it in a meaningful way. This could be before you release your first minimum viable product in beta or before you release a major new feature in your service.

How to measure

Always test in sessions:
  1. Charter
  2. Time Box
  3. Debriefing
  4. Mind Maps

 

Charter

  • Mission for the session
  • What should be tested, how it should be tested, and what problems to look for
  • It is not meant to be a detailed plan
  • Specific charters provide better focus, but take more effort to design: “Test clip art insertion. Focus on stress and flow
  • techniques, and make sure to insert into a variety of documents. We’re concerned about resource leaks or anything else that might degrade performance over time.”

99 Second Introduction to Charters | MoT

 

Time Box

  • Focused test effort of fixed duration
  • Brief enough for accurate reporting
  • Brief enough to allow flexible scheduling
  • Brief enough to allow course correction
  • Long enough to get solid testing done
  • Long enough for efficient debriefings
  • Beware of overly precise timing
Sessions time:
  • Short: 60 minutes (+-15)
  • Normal: 90 minutes (+-15)
  • Long: 120 minutes (+-15)

Debriefing

  • Measurement begins with observation
  • Session metrics are checked
  • Charter may be adjusted
  • Session may be extended
  • New sessions may be chartered
  • Coaching happens

 

Mind maps

Mind maps can be useful to document exploratory testing in a diagram, instead of writing the scenarios. It is a visual thinking tool and are quick and easy to record as they don’t follow a linear approach.

 

Session metrics

The session metrics are the primary means to express the status of the exploratory test process. They contain the following elements:

  • Number of sessions completed
  • Number of problems found
  • Function areas covered
  • Percentage of session time spent setting up for testing
  • Percentage of session time spent testing
  • Percentage of session time spent investigating problems

 

Coverage

  • Coverage areas can include anything
  • Areas of the product
  • Test configuration
  • Test strategies
  • System configuration parameters
  • Use the debriefings to check the validity of the specified coverage areas

 

Reporting

  • Create a charter
  • Features you’ve tested
  • Notes on how you conducted the testing
  • Notes on any bugs you found
  • A list of issues (questions and concerns about the product or project that arose during testing)
  • Extra materials you used to support testing
  • How much time you spent creating and executing tests
  • How much time you were investigating and reporting bugs
  • How much time you were setting up the session

 

Tools

I like to use Katalon or Jing, but to be honest this is just to record and take screenshots of the test sessions. To do these kind of tests you just need a paper and a pen to write your notes, concerns and questions.

 

Resources:

http://www.satisfice.com/sbtm/

http://www.satisfice.com/presentations/htmaht.pdf

https://www.gov.uk/service-manual/technology/exploratory-testing

How to Develop a Growth Mindset in Tech

I should have posted this ages ago when I went to the Growth Mindset workshop, but I was on holidays so I had to postpone it a bit. Growth mindset is how you approach failures and challenges in your life. I am going to focus on how to have this mindset in your workplace.

 

 

Have you ever found yourself in your comfort zone ?

 

If you are in your comfort zone you will be for some time until something happens.

Most of people love to be in the comfort zone, it is a safe place right ? But it is not in this zone that you have the chance to improve and be the best version of yourself. I started in the QA area as a manual tester as most of the QAs start and if I didn’t challenge myself I would still be there, doing the same job, unhappy but safe.

When you don’t push yourself to get out of this zone, you will need to wait until you are forced to get out. In these moments you will find yourself defeated because something happened out of your control. Sometimes if you have been in this place for many years you won’t even know where to start. I saw people working +10 years in the same company and when there was a cut they couldn’t find a job after more than 2 years and why is that ? I get that you are comfortable where you are, you have a good salary, quality of life, but and if you are outdated with the current market ? Do you think is really a good idea be completely dependent of a job ? Not sure if it is a good idea, for this reason I prefer not to wait for these moments and create myself new challenges.

 

How do you react a feedback ?

 

Embrace the challenges and be persistent, maybe will take more time than what you expected, but when you reach your objective you will feel fulfilled. There are some feedbacks that depending from who is coming you can ignore, because they are not there to add anything, these are called destructive feedbacks.

These feedbacks could be given by managers who don’t really know your work, they are not working with you daily or they don’t communicate with the team. This makes really hard for a person to give a realistic feedback, so in this case you can completely ignore because clearly this person has no clue of what you do.

They will give you a superficial feedback like you need to communicate more or have lunch with the team more often. Remember that social gathering is optional and you should do only if you feel comfortable enough. Don’t push yourself to go to places with people that you don’t trust or don’t add anything just for networking. It is better spending your time creating a quality network in another place instead.

This problem usually happens when the manager doesn’t know how to build bridges across the team, otherwise socializing in the workplace wouldn’t be a problem in the first place. During these 10 years of experience, I’ve had only 2 good managers which who I still have contact and they became my friends outside work.

The constructive feedbacks should be embraced, they come from these kind of managers. They really care about your development and your growth. They do regular catch ups (doesn’t need to be formal or even announced) with the team and they know how to build a trustworthy relationship.

Keep your mind open for these feedbacks, don’t take it personal and don’t be upset about it. I know we have a constant fight with our ego, but these feedbacks are the steps for your own development. Be thankful for having managers like this that can see yourself under the superficial impression and can give you a good feedback. My suggestion is to keep these kind of people always around, surround yourself with good professionals and be inspired by them.

 

Vision and values: Does the company has the same values as you ? Do you agree with the vision of the company ? Does the company has a vision ? Do you feel included in the company’s vision ?

Money: Do you know your value in the market ? If you don’t, are you doing some interviews to figure out ? Do you have goals where you need to sacrifice your work/life balance for an amount of time ? Is your company valuing you enough increasing your salary ?

Experience: Look for companies that look for generalist developers this means that the company will always follow the new technologies and you won’t be outdated.

Managers & Exec team: Do you trust in your manager ? Do they have your back and fight for the team ? Does he care about your happiness in the work ? Does he take your opinions into account or just ignore them ?

Peers & team: Are you respected in your team ? Do you trust in your team ? Do you have a good sense of collaboration across everybody ?

Work/Life & respect: Do you have a flexible work that understand your needs ? What is the police to work from home ? Do you need to feel the stress of commuting ?

Growth and empowerment: Can you learn from the people that you work with ? Are you growing ? Are you stuck doing the same thing over and over ?

 

How emotionally intelligent are you ?

 

 

Constant Learning

 

To summarize basically what was being written here, push yourself and accept the challenges. You won’t be successful on all of them, but be resilient and continue improving. Take advantage of learning with the previous mistakes. Sometimes you will need to change your strategy or even your goal, but what matters is the quality of the journey !

 

Thanks Joanna Chwastowska for sharing this workshop !

Using Artificial Intelligence to Speed up your Test Automation

Hey guys, today I am going to share with you this awesome webinar that I watched last weekend ! I suggest to follow IIST as they are always sharing good webinars about test.