In my last article, I wrote about how to develop good quality software in agile. In such an approach, test automation is essential. And at the same time, according to “Challenges in Test Automation: Survey Key Results”, 62% of survey respondents (mostly managers) agree that one of the top challenges in applying test automation is lack of skilled people. Many manual testers would like to start their journey with developing automated tests, however, without a good learning path and some technical background, the road seems to be a bit bumpy.
With this article I had two goals in mind:
- To help aspiring test automation engineers to plan their learning path,
- To help managers set up development paths and promotion requirements within their teams.
Commonly, we distinguish three levels of skills: junior, middle and senior, or — as I like to call them — foundation, professional, and master.
1. Test Automation Foundation
To start working on automating test scripts, one should have reasonable familiarity with programming tools, as well as decent knowledge of testing itself.
It is a no brainer that test automation engineers needs to know how to design tests. First of all, you need to know what tests are for and where to test. And this knowledge is not as easy to acquire as it might seem. Common certification is still propagating processes from 15 years ago. But since then, we have made some progress. So instead, I recommend reading about the agile testing process and approach. A good source is the Agile testing book by Lisa Crispin and Janet Gregory. You also need knowledge about black-box testing techniques, designing test cases, defining testing data, and of course, writing test reports and issuing bugs. To augment these must-have skills, there are two more that I’d suggest are worth acquiring. One is BDD (Behavior Driven Development) — an approach in which software is specified from the end-user perspective with the use of dedicated domain language, Gherkin. The other is the theoretical aspects of API testing. Since automating tests on the API level gives the best bang for your buck, knowing what it is and how to design API test is a good idea. For novices, I would recommend reading up on the VADER approach (Verbs, Authorization, Data, Errors, Responsiveness).
Alternatively, if you choose to specialize in API test automation only, you can skip Selenium/PlayWright and take a good look at API testing libraries, like Rest Assured.
2. Professional Automated Tests Development
All right, so you have decent test automation skills and have some experience in the field. It’s time to take your game to the next level. First of all, spend more time on honing your programming skills. As a professional tester, you will be responsible not only for writing scripts but also for making more architectural decisions. You will also be helping younger teammates in guiding their code development. So, take time to arm yourself with an in-depth understanding of Object-Oriented Programming. Make sure you read such classic books as Clean Code by Bob Martin and Refactoring by Kent Beck. This is also a good time to familiarize yourself with the basics of software architecture and some design patterns.
With all that theoretical programming knowledge you may now go deeper with your programming language. For Java, for example, you should be able to use more advanced aspects, like streams API, lambda expressions, generics, etc. You should be also able to develop some basic operations on databases. This is useful mainly for test data seeding in the target environment. It is also good to know something about your Application Under Test. If you are testing a web application, where the front-end is written with the use of Angular or React, it is good to know some basics of these front-end frameworks, even just for adding automation IDs for elements.
In terms of testing, you already know most of the things. It is time to move a bit further beyond functional testing. As a professional test automation engineer, you should be aware of other types of automated tests: performance tests, load tests, security tests. At this level, it is also good to know different approaches to test automation, like Acceptance Test Driven Development, Keyword Driven Testing, Data-Driven Testing, etc. The idea behind this is that in test automation we usually need to select proper tools for the situation in which tests are developed. The broader your knowledge and context awareness, the better decisions you will make.
Since you already know most of the tools used for functional test automation, you need to learn how to use tools for non-functional testing. For performance and load testing, a good choice would be JMeter or Gatling. But the selection of particular tools depends on your preferences and project context: for analyzing web application code, I would recommend mastering Lighthouse.
3. Master your Test Automation skills
All right, so you have several years of experience in test automation, and you would like to master your craft. At this level, you should be able to perform more advanced programming tasks. To be able to do that, you will need some more advanced programming background. Most valuable will be design patterns and software architecture. For design patterns, you are probably already familiar with Page Object pattern, factory, facade, and a few more. Now it would be time to master other, more advanced ones. Also, it is the level where you should have a good understanding of software engineering, and especially the DevOps model. This background will give you a better understanding of the test automation context and will let you plan an automation strategy well.
As for programming tools, since you already know your programming language, it is time to go further towards DevOps tools, like Azure DevOps, Jenkins, etc. You should be able to build new pipelines and embed different automated tests in them. And since we are talking about DevOps, you should also be familiar with Docker. You should be able to build an image, and execute container or containerized applications (e.g., with Docker Compose).
The mastery level is all about awareness. So, in the testing field, you will no longer learn new things on the level of individual tests, but rather hone your skills on a higher level. Thus, you should be fluent in Continuous Integration and Continuous Delivery approaches, know how to best tailor tests for particular applications and situations. You should also be familiar with regulatory requirements that may apply to automated tests (if you are working in regulated industries).
4. Bottom line
There is one more thing you should learn. And this is the ability to observe, critique and change. Among all the skills mentioned above, you should be hungry for learning and constantly be looking for process optimization. This is not something you can learn from others. This is something you should learn from yourself. Pay attention to what you are doing and try to do it better next time.