Moving from manual QA to automation: Possible step-by-step plan and practical advice for beginners

Kostiantyn Teltov
19 min readNov 20, 2023
This image was generated by https://www.unstability.ai/

Hello there,

Hope you are doing great:)
Do you want to start automating? Do you know how to do it? Are you afraid to start? This article is dedicated to those QA’s who want to start automating or maybe thinking of starting but don’t know what to do or maybe those who don’t understand what it is and want to get familiar.

A couple of years ago, I wrote an article “Road of Change: QA Manual to Automation Path”. It was much more of my personal experience of failures and success stories and a little bit of advice.

This time I want to come from the other side. I want to dive a little bit deeply to switch your mindset. We will try to avoid all the pitfalls and come up with a successful plan that you can use at the beginning of your journey. Once we have a plan, we will try to follow a beginner’s path, discussing some of the challenges you may face and possible solutions. I am not saying that this is the only way. But I know this approach already worked with people I am familiar with.

Ready to go? So let’s start and answer the question why do you need it?

Why you may decide to Automate?

This is not a question about the advantage of automating the project/product. The context of this question is more about personal feelings. Why do you, as a person, want to start doing it? What makes you think about it?

I decided to ask this question on LinkedIn and some of the people I know had some answers for me.

Mario got tired of repetitive and routine tasks and decided to solve more complex challenges. Which he does now. Believe me :)

Olena believed this was a more effective way of testing. She set herself a goal to become Test Automation and achieved it. Now she even likes it.

P.S. I remember the first months when she was just starting to learn:)

Sojan thought he could better understand how Software works internally. He was thinking it may help him to test more effectively. He never tired of asking questions and continued to grow and learn new staff:)

Anastasia realized she didn’t have a choice because the project needed it. She dived deeply into API test automation. Not a usual start for beginners.

As for me, I was dreaming about Game Development and didn’t want to be stuck as a Manual QA Lead without technical skills. Also, I understood that QA’s with Automation skills are more in demand in the Marketplace and may earn more. Yes, work should bring not only pleasure but also money:)

As you may see all answers have a similar core. But these are the answers from the guys who have experience and horizons. How I can sell it to you? If I were in your place I would consider the following personal benefits:

  • You will become more in demand in the Marketplace
  • Your salary will grow
  • You will really start to understand how software works which will open a more efficient way of testing
  • It will become really interesting once you beat some challenges
  • It will open you to many more directions in the future

Challenges? Yes. I need to prepare you. There will be a lot of challenges in the beginning. Not even in the beginning. But once you have some confidence you will love these challenges too. But what is the biggest challenge you will face?….

Challenges and Why You Should Survive

I want to ask a help again from people on LinkedIn. My second question to them was “What was the most challenging in the beginning ?” Yes, such simple as it sounds.

Switching mindsets when transitioning into programming or test automation involves a fundamental shift in thinking. Some developers refer to this shift as “breaking” your existing mindset, but I believe it’s more about “fixing” or refining your mindset to think more logically.

Programming essentially teaches individuals how to communicate with computers using a logical language. It encourages a systematic, logical approach to problem-solving and analysis. Therefore, the transition involves embracing a more logical way of thinking, aligning your thoughts and problem-solving techniques with the logic that computers understand.

Having a mentor is invaluable when transitioning to test automation. A mentor provides direction, and guidance, and often lends a supportive hand in navigating this new territory. For beginners, having someone to motivate and occasionally provide hands-on assistance can significantly accelerate learning and growth.

This comment is not a concrete example of a challenge. But it covers another aspect. It shows how confidence grew when some problems were solved.

Again, it is very difficult to change your mindset for the first time. People are always trying to think more complexly. But when you write code, you are telling the computer what to do, and it should be direct commands.

I agree with all the comments. In the beginning, it was really difficult to change my way of thinking and to find someone to help me find the right direction. Once I solved some of the problems, I became more confident. Once I started to be curious, some developers helped me and guided me.
There is one important thing I would like to emphasize. You should not give up when you start to fail in the beginning. When you start to think that you cannot do it. It is not yours and should do something else. It is a dead end. Maybe you should do something else, but you haven’t even normally tried it.

But how to resolve this mind problem?…

Sometimes you just need to sleep. Sometimes you need to walk/run/do some exercises. Sometimes you need to start again. Just don’t give up. Read, watch, and try again if you fail. Don’t give up. All in your head. You are the master or general of your head. Step by step and you will catch the chicken.

So what to do next?

I have mentioned this in some of my previous articles. Just tell yourself “I am QA Automation”. But you should do it with confidence, like “I am Iron Man”. You should really believe it and this will be your first small step.

Did you? Good. Now you are. You have achieved your goal. We just need to work on your superpower.
And all work should always start with the plan. Let’s start with the high-level plan. This is the most important thing you should know at the beginning. It may not be an exhaustive list, but it is definitely something you need to know.

  • Version control system. A wise choice will be a GIT. It is the most popular today. Why am I looking at version control? I want you to commit and push your training project to a remote repository. In this case, you will achieve a couple of goals. You will be training with GIT, and you will also have one or more projects in your portfolio.

Why?: As the engineer writing the code, you will often need to track your changes in a remote repository. In addition, you may be working in parallel with other engineers, and you will need to resolve parallel work conflicts.

  • Start learning and practicing the programming languages commonly used in test automation, such as Python, Java, JavaScript/TypeScript, and C#. Automation is coming and you need to know the basics. We will cover it in more detail later on.

Why?: It will be better to understand the basics of programming when you start working inside some test libraries and frameworks. In my case, I didn’t understand it at the beginning, which caused me to spend a lot of time. In any case, I started to learn it. I would recommend starting at the beginning.

  • Start learning about UI test automation frameworks/libraries. In this article, we will choose Selenium WebDriver.

Why?: As for beginners it is always easier to start from something you understand like it works. Clicking buttons, and marking checkboxes/radio buttons on the web page. In today’s world, more and more automation is shifting to the left. It means we have less UI and more unit and integration testing. However, UI web/mobile test automation remains one of the most in-demand skills.

  • Start learning API test automation/framework

Why?: I have already mentioned that shift-left testing and integration testing is one of the important parts of this process. Nowadays, QA’s very often take this testing layer under their responsibility. Including automation as a tool.

Let’s stop here. You can always add more. For example, mobile automation. At this stage, we are just beginners :)

GIT and task management

Task Management

Starting from this moment we need to split our epic point goal into smaller parts. Why it is important?

  1. You will see a list of planned points and you will know your progress
  2. Each time you will close a point you will feel like you have a small victory. Some of these small victories will be your big victory in achieving your goal.

Remember, you already decided you are QA Automation. It is left only to prove it yourself. Our Git plan will contain the following points

  • Read, watch, or pass GIT basics. There are a lot of resources you may find. As an example YouTube, https://www.w3schools.com/git/, https://learngitbranching.js.org/. With the last two, you are not only watching but also practicing
  • Create a GitHub or GitLab account if you don’t have one and create an empty project inside. Let’s call it something like “ProgrammingBasics”. The name doesn’t matter now. If you know what language you want to choose, then you can call it “CSharpProgrammingBasics” or “JavaProgrammingBasics”
  • Pull the project to your local system

This is what our plan may look like at this stage. As you may see it contains some EPIC tasks and smaller ones that help us to achieve small victories

P.S. I used Google Tasks for task management. But you can use whatever you like for task management

GIT practice

The practical part will be the creation of the project on GitHub

And pulling this remote repo to your local PC/Laptop

Task with *: You may also want to create a new local branch. We will start work in this branch during Basics of programming phase. Call it like “my-first-code”

Let’s move to the basics of the programming part

Basics of programming

Once again. First plan and sub-tasks. Following the same pattern and Winning

What programming language to choose

A difficult question. We discussed it in one of the webinars and it depends on your opinion. It is easy if the company offers you the opportunity to learn within the company and you choose a language that the company uses. If you have a mentor who you know can help you, it might also be a choice. The third case is the most difficult and you can google and find the most popular languages for test automation. I would say that if you do everything right, it will not be difficult to switch to another language in the future. Remember, at this stage, we are starting from scratch.

Plan

This one plan will be based on C# language. Anyway, it will be pretty similar if you use other languages. Please remember to write down your plan like we did before. It will be a required definition of done for each planning stage.

Strongly recommend for the beginners:

  • First Console Application with Hello World. You can skip it if you know how to do it. The goal is just to print “Hello World” in the console app.
  • Variables and Constants.
  • Work with String. Understand what is it. Try to play with different String methods
  • Learn Datatypes of the chosen language. Some of the languages like JS and Python contain fewer datatypes. C# and Java contain more. Anyway, you need to be familiar with that.
  • Mathematical operators. Very often used.
  • Decision Statement (if, else, switch, ternary operators, &&, ||). Yes. This is the basics of each programming language. Synaxis is pretty similar.
  • Arrays. This is also an awesome and important topic you need to be familiar with from the beginning
  • Loops. Maybe a little different depending on the language. But in general: do, while, for, for each
  • Type casting if it’s a strongly typed language like Java or C#
  • Methods (accessibility, return types, parameters, logic block)
  • Classes and objects (Instance variables, Methods, Creating objects, accessibility, this, constructors, destructors, overloading)

Good to know, but maybe postponed for some time

  • OOP: Inheritance, Polymorphism, Encapsulation
  • Abstraction and Interfaces
  • Exceptions
  • Generics in Java, C#, TypeScript, Python
  • Data Structures

The first thing to remember is that this is a basic plan. You can always find more updates by asking your mentor or finding them during your training.

Practice

The plan is good. But how to start working on it?

  • First, find resources where you are going to learn. Like W3School, YouTube videos, Udemy/Pluralsight/LinkedIn Learning courses. A mix of all of this.
  • Second, create a project and practice from the beginning for each of the topics from the plan. As an example, you may separate each topic by specific folder where you can put code implementation. Once you are closing some topic, you may commit and push it to the remote Git repository (GitHub, GitLab, etc.) In such case, you will also repeat git flows and git commands (if you use console GIT)

Just follow all the planned lessons and write a code. It is not enough to listen. Try to understand what you are doing. If you do not, try to do it again and again.

It may take time. Weeks or months. Remember our rule — “Don’t give up”.

Once you have a feeling you understand some basics, you can think about creating a simple program. Like calculator. Boring? Ok create a text game where you are asking the questions and someone is answering. Score points for the different answers and show them at the end of the game.

Maybe you want to create even something more useful like your apartment payments. It is up to you. Most important it should not be too difficult.

UI Testing Framework

The approach will be similar to the previous one. You need to create a new project on a remote GIT repository like GitHub. I’m not going to stop here, because at this moment you should already know how to do it from the previous step. I would recommend you start with Selenium WebDriver because it is still one of the most popular libraries to work with your browser. If you have an understanding of how to work with it, you may easily learn some other libraries/frameworks.

Let’s try to create a simple plan

Plan

  • Understand what Selenium is and its importance in web automation testing.
  • Get familiar with HTML structure, CSS styles, and basic JavaScript concepts as they are fundamental for web automation
  • Understand how to locate elements using different locators like ID, CssSelectors, XPaths, and more
  • Learn WebDriver methods of interacting with these WebElements. Like clicking, selecting drop-downs/checkboxes, reading text, and more. I don’t want to describe everything, but you will find a lot of staff during passing training/watching videos. Here you should understand that part of this job will always be searching for some solution. Especially when you are just starting. Today you have Google, ChatGPT, and more.
  • Will be nice to cover also the topic of waiting WebElements on the page. Pages or elements do not always appear immediately. It requires some time to open. In other case, you will realize that code works directly. It does what you say immediately and sometimes elements or pages may not be loaded yet. There are some built-in wait mechanisms. It will be nice to start work with them in the beginning.
  • Learn the most important Design Pattern for UI test automation called — PageObject. This is a must-have even for the beginners. I would love to talk about others, but it is not critical at this stage
  • Finally, you need to find some Assertion/Verification Framework available in your language. In your tests, you need not only to do some actions but also to verify that the results met your expectations. You may also google it, but the most popular are:

Java — JUnit

C# — NUnit, XUnit

Python — PyTest

JS/TS — Chai, Jest

In the beginning, it will be enough to start from plain libraries. In the future, you may want to learn some helper libraries depending on language, like FluentAsertion(C#), AssertJ(Java), ShouldJs(Js), and others.

Practice

  • So, the first two points mostly will be Videos and courses where you need to get familiar with basics and concepts. Maybe try some basic code writing. You may find a lot of videos and courses on the internet. It should not be a problem at all.
  • The second part of the plan is a more practical part where you will face real challenges. Usually training projects are easier than the real world. I would recommend finding some sites on the internet and trying to automate different scenarios with different actions. Like clicking the buttons, reading the text, navigating to other pages, marking checkboxes, and everything you have learned before. At first, it can be just simple cases with the verification. Then you may want to cover the full user-flow process, like performing the registration or login, performing a search of the item, and ordering. Just think about some real-world user flow.

P.S. Please remember you should have an output artifact. In your case, it will be the GiHub project. You may want to create a new one in the beginning.

At the end of the practice, you should have your pilot WebDriver project in your portfolio and of course some experience:)

API Testing Framework

At this moment you may already have some coding experience. Even if it is a PET project, you are not a rookie anymore. You are “Iron Man”. Sorry, “QA Automation”. Anyway, we need you to have more power. API testing is a very important part nowadays and it is also important to have them properly automated. We will build our plan based on REST API. It is still a very popular way/standard of API implementation. In the future, you may consider learning something else like GraphQL. Or maybe SOAP (Hope not, but it is still possible)

Plan

  • We just need to find a proper library/framework for appropriate language. There are some popular you can consider for the different languages

Java — RestAssured (A Java library that simplifies API testing, providing a DSL for writing expressive and readable tests for RESTful APIs.)

C# — RestSharp (A popular C# library for creating and executing HTTP requests in a simple way, often used for API testing and interacting with RESTful APIs.). Also, my personal recommendation is to include ‘Flurl’. I may help you to build paths more easily.

Python — Requests (A simple and elegant HTTP library for Python that makes API testing straightforward by providing easy-to-use methods for making requests and assertions.)

JS/TS — Axios (While not a framework itself, ‘Axios’ is a popular HTTP client for making requests in Node.js and can be utilized effectively for API testing when combined with testing libraries like Mocha or Jest.)

Also very popular nowadays “Playwright” library contains the possibility to run API requests under the box.

I will say more here. Playwright is probably the best test automation library that any beginner can use in the modern days. It has built-in wait functions and a lot of stuff comes under the hood. You don’t have to worry about implementing a lot of things. However, in my experience, it will not always be the best choice for your project due to the project's history and complexity. It might be better to let someone with more experience guide you.

  • You are already familiar with some of the assertion/verification frameworks. Anyway, you may want to improve some of the knowledge.

Practice

Just try to cover as much as you know. Like try different methods “POST, PUT, PATCH, GET, DELETE”.

Try positive/negative scenarios.

Try with different body data, like simple and complex fields/properties

I know, now my code may look like something alien to you.

Your first code should not be perfect. Don’t try to use all the patterns. Do not compare yourself with someone. Especially with people who already have many years of experience. Just follow step-by-step. You can always return to your code and improve it or refactor it. The most important you need to have a feeling you can do something. Yes, it may be a simple thing at this moment. But nothing great was built in one day. So, practice, don’t give up, ask the questions, and learn new stuff when you feel you can move. In the modern days, you can find a lot of information. There is no someone who can teach me should not be an excuse. It is not enough to think, you need to do it!

What next?

Oooh. There are tons of things you can learn.

  • Implement the Reporting. Like Allure. Reporting is a very important part of the tests. You need to show test results and people should have a possibility to read and understand it.
  • CI/CD tools. Depends on your preferences: GitLab CI/CD, Jenkins, Azure DevOps, GitHub Actions, and more. A crucial part of test automation may enable quality gate, quick and automatic response, and online reports
  • The previous step will require knowing some scripting languages like PowerShell, bash, etc. Would be nice if you could implement more advanced things using the scripts.
  • Mobile test automation frameworks/libraries. In the modern world, more and more staff we with the help of mobile phones/tablets, and it also requires testing and automation.
  • Continue learning code. You have to learn more advanced stuff related to OOP, Data Structures, Design Patterns, and at some time algorithms. You need to create your tests and maybe test automation solutions more effectively.
  • Continue learning new libraries/frameworks. As a QA Engineer, you need to be more effective and find the best solutions for concrete cases. It requires to have a wide range of knowledge.
  • Test Data preparation steps. I didn’t want to start from it, but automation is not only about automated test creation. Sometimes creating the test steps is an easier part. Maybe some of your colleagues or you spend a lot of time on test data preparation. Sometimes you can simplify it but creating a script that will not be even a part of automated tests. Even for manual checks such scripts can save a lot of time
  • You may want to participate in contributing to some code libraries or creating your own libraries for public usage (NuGet package, Node, etc.)
  • You may want to understand testing pyramid levels in order to write your tests more effectively and not repeat verifications.
  • Some BDD libraries like SpecFlow or Cucumber. I don’t believe I’m writing it here. Personally, I’m not a big fan of this additional layer. But I cannot argue in some cases it may be useful. Please just don’t do it for API tests. Or you can try and tell me “Kostia you were wrong”:)

The most important thing you need to know is that the world does not stand still and there will always be new and more advanced solutions. You will always have to learn something new to be up to date.

Special thanks

Before the end, I want to say Thank you to the people who helped me in answering some of the questions in the beginning. To Mario Alvarez, Olena Danchenko, Anastasiia Nomerovska and Sojan Somarajan.

P.S. All of them gave me permission to use their real names:)

Thanks for reading

I hope this article will help those who are still thinking if it is worth starting or who are afraid to do it. Automation cannot change the manual testing process. You still need to know what to do and how to do it more effectively. It acts more like a tool to help you achieve some goals, like simplifying regression testing, having a quality gate, quick responses, and more. Personally, I don’t even like to divide QA into automation and manual. So, be ready for some challenges, and be patient and curious. And remember, if you have already decided, then you are a “QA engineer with automation skills”. Good luck on your journey!

--

--

Kostiantyn Teltov

From Ukraine with NLAW. QA Tech Lead/SDET/QA Architect (C#, JS/TS, Java). Like to build testing processes and help people learn. Dream about making indie games