How to Get Started in Test Automation Part 1
We’ve seen a recent rise of web-based applications in the marketplace, and an influx of more and more automation testing jobs that require programming, technical, and a variety of automation skills. As a result, manual testers are seeing the need to switch from the manual testing realm of Quality Assurance (QA) and delve more into the automation-based side of the industry in order to stay in demand and remain employable.
Making the shift from manual testing to automated testing is a wise choice, as many Software QA jobs require an array of technical skills more often found in automated testing in order to fill their hiring needs.
To some developers—those who don’t like change—this move may feel uncomfortable,. Others developers will see this time of change as an opportunity to take their career and skills to the next level, making themselves more employable.
Whenever demand outgrows supply, opportunities increase. Developers with the right skillset can ride the train to a great and rewarding career.
If you are looking to transition from the field of manual software testing to that of test automation—or even if you’re looking to move over from a different area of software development—there are a number of steps you can be take to be successful as you make this change.
Habit two of Dr. Stephen A. Covey’s book 7 Habits of Highly Effective People states, “Begin with the end in mind.” I believe this principle to be true when it comes to getting started in test automation.
Start by doing a market assessment of the needs of those hiring automation engineers. Once you have an understanding of their technical hiring needs, you can fill that need by acquiring the exact skillsets they require.
A good place to start can be by looking for job descriptions on any job board site like Indeed.com, Dice, Monster, CareerBuilder, LinkedIn, etc. An example of job search keywords to use when doing a market assessment are:
- Test Automation Engineer
- Automation Developer
- Automation Testing/Automation Tester
- QA Automation Engineer
- Software Development Engineer in Test (SDET)
Keep the following questions in mind as you do your search, to help you understand the mindset of employers and what they are really looking for in candidates:
- What skills and technologies do they specifically mention?
- Do you see a pattern of a particular skillset or technology for those skills?
- What are the required years of experience needed, if any?
- Are there any particular industries who tend to hire more automation engineers than others?
- What are the salary expectations?
- Are the tools or technologies in demand more open source or commercial products?
Now let’s look closer at a few job descriptions to get a sense of what the market is looking for. Keep in mind, these positions are within the United States. If you live outside the U.S., please check out job search engines in your country of residence.
- Software Automation Developer I:
- Has solid understanding of object-oriented programming languages.
- Is familiar with Jenkins, Test Complete, VersionOne, Git, Visual Studio, Oracle, MSSQL, Hyper-V, AQTime.
- Work closely with developers, business analysts, and other testers to define the automated testing components that will be used to validate requirements against developed software.
- Automated QA Tester:
- Stores automated tests on the respective source control system—TFS, GitHub etc.
- Follows predefined Automation and DevOps standards for Automation, as well as the processes of continuous integration and deployment.
- Experience with ALM tools like TFS, Jira, HP QC, and test automation tools, preferably Selenium WebDriver.
- Quality Assurance Automation Engineer:
- Experience with Selenium WebDriver.
- Demonstrated programming skills in Python, Java, or related languages.
- Experience with mobile testing / Appium.
- Software Developer in Test:
- Experience with Visual Studio, Subversion, GitHub, Unity, Teamcity, Jira Cloud, Confluence.
Based on these job descriptions, here are few key takeaways:
Hybrid/Blended Roles: Pay close attention to the job titles and how these companies view software test automation by the titles they give these roles (Software Automation Developer, Software Developer in Test, etc.). Do you notice a pattern? These companies are more or less referencing QA engineers as software developers.
In other words, they are saying indirectly that they’re looking for software developers who understand how to test.
For the manual tester, it means you need to learn to code or learn how to program in order to turn manual test cases into automated test scripts.
For the software developer looking to move into automation testing, it means you need to learn about software testing methodologies, the software testing life cycle, and how you can build automated test cases to support these testing life cycles.
Don’t miss this critical shift or you’ll be left behind. With the rise of Agile methodologies and Agile-based projects, more and more organizations are blending QA and developers into one. Therefore, you want to begin to position and prepare yourself according to what they are looking for. Individuals who have a base in the software testing world but who are also well-versed in the skillset of a software developer are gold.
Open Source Technologies/Programming Languages: Notice the technologies and programming languages highlighted in bold in the descriptions. These technologies and languages are your targets—you need to learn them to be marketable.
Pick one technology that’s in high demand based on your search and start building your skill set by working on and getting involved in real-world, practical applications and projects. This approach will speed up your learning curve.
If you’re not sure which of those programing languages to start with, let’s narrow it down a little.
Pick an object-oriented programming (OOP) language
Let’s face it: most manual testers are scared of programming. Just the thought of getting “under the hood” to see how systems and applications really work tends to frighten and intimidate a lot of manual testers. For the most part, this fear is why they are manual testers in the first place.
Programming is the foundation of automation testing. If you want to go into automated testing, you need to know how to program, and the better you are at programming, the better an automation tester or automation developer you’ll be.
So if you want to stay competitive in this ever-changing software/technology space, you have to decide if you’re willing to overcome that fear in order to become an in-demand software automation developer.
The good news is, with a little guidance, perseverance, persistence, and lots and lots of coding practice, you can improve your programming skills.
The next logical question is, which programming language do I learn?
However, for folks with no previous programming experience, I’m a firm believer in simplicity and taking things slow and steady. In other words, I feel the way to success is to take on a challenging task and get small wins along the way, building confidence as you go.
For that reason, a great object-oriented programming language to start with is Python. It is an object-oriented programming language and has a simple syntax. Plus, Python is now the most popular introductory teaching language at top U.S. universities.
It is also a high-level programming language, meaning the code is easy to read and write, which makes the transition to the coding world much easier.
As you begin your journey to learn any object-oriented programming language, here are a few concepts you should look to understand and master that will help you better understand automated testing:
- Object-oriented programming (classes, objects, instances, inheritance, attribute, etc.)
- Modules, Standard Libraries (of whatever language you decide on)
- Data Structures (Dictionaries, lists, tuples, etc)
- Data Types (Strings, Characters, Integers, floating point, Boolean, NoneType, etc.)
- Errors/Exception Handling
- Arithmetic Operators/Order of precedence
- Comparison, Logical Boolean Operators
- Control Flow: If-statements, for-loops, while-loops, etc.
- Reading/Writing to files
Programming is the foundation of automation testing. Learn to program, and you’ll learn to automate.
Pick an Automation Tool
It bears repeating: the better you can program, the better you can automate.
Once you’ve started to learn a programming language, the next step is to learn how to use an automation tool.
Because most companies lean towards open source (or free software) tools for automation (as opposed to commercial products licensed by a particular company or vendor) due to the cost savings.
A few key concepts you should master in order to build reliable, maintainable, and effective automated test cases are:
- Design Patterns: Page object model
- Finding elements of a web page via different locator strategies (CSS Selector, XPATH, ID, Name, etc)
- Switching Windows/iFrames
- Unit Testing Framework
- Testing in the Cloud/Parallel Testing
- Data Driven Test
- Testing on various web browsers (Firefox, Internet Explorer, Chrome, Safari, Opera, etc)
- Implicit and Explicit Waits
- Action Chains
Once you’ve selected an object-oriented programming language and selected an automation tool based on your market assessment, the next step is to…
Practice, Practice, Practice
Whatever you do, never give up. Learning something new is always a challenge. However, every challenge can be overcome with the right amount of practice and dedication. The time frame it takes to learn these new skills and technologies is completely up to you and how much practice, effort, and dedication you put into learning these new skills.
Any professional athlete will tell you that what makes him or her great at his or her craft is the work they put in through practice. It has been said that Michael Jordan played hard, but practiced harder. This is an approach anyone looking to get started in automation should look to leverage—practice, practice, practice your newly found skills until they become second nature. It’s the only way to improve your skills and become an in-demand tester.
One good way to practice is to actively learn both the programming language and the automation tools by playing with them. In other words, build little programs or automation test scripts, break them, change things up, and see how they work. Then learn from what you did, and then try it again. Practice playing, building, and then learning. This pattern will help accelerate your learning curve.
Time to get started
The most challenging part of doing something new is getting started. At times, the reason we procrastinate or never get going is because we don’t have a roadmap or game plan to help us chart the course.
While making a big change in your career’s direction might seem frightening, it’s necessary to stay valuable and marketable. You need to develop new skills to stay on top in the ever-changing world of software development, and to be what employers are actually looking for.
Start small: assess what the market is looking for, learn an object-oriented programming language and automation tool, and keep practicing.
Before you know it, you’ll be ready to look for new employment opportunities.