My road to test automation
Hi, I'm Daniel Gold, QA lead & Automation Engineer.
Let me start by clearing something up, I do not believe in the term “Manual QA”. There is a tester, a good tester, and an excellent tester, and as such he should have a wide toolset that includes code and automation. The ability to apply all that is necessary to implement an all-around test infrastructure is what makes a tester so valuable to an organization. I also believe that understanding the QA process and company's business logic can highly benefit the productiveness of an automation engineer.
How it all began...
Even at the beginning of my journey as a QA Engineer, I understood that in order to become a more versatile tester I should acquire knowledge in at least one OO programming language, and understand the concept of test automation. At first, I started exploring famous veterans such as QTP and Selenium IDE. That was the first time I touched and felt automation guided by youtube tutorials and online documentation. After that, and following the "Selenium hipe", I started learning how to code in my free time. I loved testing, and at the same time, I felt that there is something extremely satisfying in writing code. Creating something from scratch, making it finally compile and work, dealing with programming dilemmas and challenges has its magic. In retrospective, it was only natural for me to try and combine the two things that I was passionate about. Following that feeling, I signed up for a "C# and Selenium automation workshop" delivered by Yoni Flenner, One of the most professional and experienced Test automation consultants in Israel. It was so much fun and motivating, that I have left that workshop as an automation engineer at heart.
What happened next...
I decided to focus on how to write test automation. At that point, I knew basic C# OOP and started scanning the internet in a search for a legit source of self-learning. The problem was that in most of the online sites and video courses you get a lot of mixed information, sometimes you are instructed on different methodologies and design patterns in highlight, and other times you only get the answer to the "How?" not the "Why?" of "Why like that and not the other way?" and that was something that I was missing. Adding up to that the fact that most of the good courses cost money and that does not guarantee the quality of the lecturer or how clear he will be to you.
I have to say that my self-learning was not minimized to code or automation, I always aspired to learn new things and was passionate about technology, and one of my top knowledge sources were QA forums and closed professional facebook groups. Naturally, when I was missing some answers I could not find in search engines, I asked there for advice. When it comes to QA Automation, I have to admit and give the deserved credit again to Yoni Flenner for continuing to be my number one online source of knowledge. Over the years I observed so much from his blog, articles, website, forum comments, and posts, that I just have to say - thanks for being a positive role model for professionalism.
Now, back to my self-learning, Like I mentioned I was dedicating my free time to practice, but at some point, I felt that I was stuck. I was also already doing some automation as a part of my QA position at that time, and yet, I wanted to be able to expand, set up, and write test automation infrastructure from scratch, and I wanted to know how to do it right!
Naturally, I came to Yoni for advice, and he offered me to sign up to one of his Java programming and selenium automation courses. That was one of the best professional decisions I made. In retrospective, by that, I minimized the time it took me to learn by letting him focus me on what was important to know, provided myself with learning material and I got the answers to my "Why" questions. Don't be mistaken, I totally believe in learning the hard way and from your own mistakes, but at some point, you have to understand the answers you find are the correct ones.
You never stop learning...
Following the course, I started a pilot at my workplace. It began with an all-around market research for available open source and non-free tools out there that could suit our company's needs. I have dedicated X amount of time to explore each tool to understand its capabilities and limitations. (Recording functionality, coding ability, maintenance complexity, set up and implementation, external file handling, reporting system, ability to expand capabilities beyond the web interface). Following that, I made a presentation to the VP R&D and received a green light to start the process. During that time I have managed to implement a new KDT based automation tool called Robot Framework. That experience revealed me the challenges of the occupation overall and the KDT framework itself. I had the chance to learn some python so I could expand the Robot's capabilities and saw the meaning of adding an extra layer and additional "language" to your framework's architecture. Next up, I proceeded to work with Selenium with C# and Java and learned its capabilities and limitations. Automation is a fascinating and challenging world with over 2000 different tools, domains and subdomains, and all the things you learn, and the challenges you face while implementing automation, enrich you with a valuable knowledge base. CI tools (Jenkins, Bamboo, Circle CI), external layers and tools such as reporting systems and visual validation capabilities, handling local file system (for example by using Robot class or Auto-IT), visual pixel validation, Grids and remote run sessions, external file handling, different integrations, error handling and the ability to debug and understand the source of failures. It's a fascinating and challenging world that never ends.
Today I work in a very fast growing successful startup, that develops an AI-based test automation framework, and it is an ongoing and exciting challenge.
And to those of you that aspire to grasp test automation I say...
Take your time, learn the field of work and understand what it means, do it for the right reasons. Learn at least one programming language, learn the basic foundations, methodologies and design patterns before you jump ahead, do your research and acknowledge that it takes time!