My path from Manual QA to Automation Engineer with Appium, Python, and Behave

Yana Lavrik
Instawork Engineering
5 min readSep 22, 2023

--

In this blog post, I’ll share my professional journey from a Manual QA Engineer to a QA Automation Engineer, focusing on creating and maintaining automation tests for Android and iOS using Python, Appium, and Behave.

Manual Testing: A Solid Foundation
My QA journey began with manual testing, where I thoroughly tested web and mobile applications. Manual testing, while labor-intensive, provided me with a solid foundation in understanding application behavior, identifying edge cases, and validating user interactions. It is essential to acknowledge that manual testing remains an integral part of the software development process. Its role is not diminishing; rather, it’s evolving in tandem with the rise of automation. Manual testing provides a crucial human touch that automation can’t replicate entirely. Testers’ insights, exploratory testing, and subjective evaluation of user experience contribute exceptionally to product quality.

The Automation Adventure with Python, Appium, and Behave
My adventure into the world of automation began even before I officially joined IW, during my initial interview. It was there that the intriguing question of whether I’d be interested in learning automation surfaced. While I recognized the importance of manual testing, I also acknowledged its limitations. The prospect of diving into automation was exciting, offering a priceless opportunity to gain hands-on experience.

After a few months at IW, where I familiarized myself with the application through manual testing, the time came to embark on my transition. A well-defined path, with a duration of approximately six months, was laid out for me, including the following key phases:

· Web fundamentals

· Programming basics and coding concepts

· Write code and practice using Python

· Automation technologies and advanced programming

Though I started on this journey with a structured path, I was far from alone. Weekly meetings with a dedicated Senior QA Automation Engineer provided valuable guidance and allowed me to track my progress. Moreover, I was fortunate to have the entire QA team as a resource. They were readily available to assist with any inquiries, no matter how trivial or complex.

And so, my transition began.

After completing theoretical groundwork that not only provided valuable knowledge but also served as a good refresher for me in the tech field, I continued with learning Python. Python is the perfect programming language for test automation. It is a versatile and beginner-friendly programming language known for its readability, simplicity and clean syntax. All that makes it an excellent choice for beginners to grasp programming fundamentals. And that was an easy part. Yet, when the time came to tackle my very first coding exercise — calculating the Fibonacci series — I must admit I was somewhat terrified. Some might chuckle at this, but it was a new and unfamiliar challenge for me. Of course, I could have found a solution by simple search online, however, my goal was to explore these solutions and formulate my own unique logic.

It took me a couple of hours to complete the task — a duration that might seem lengthy for a seasoned QA Automation Engineer. Nevertheless, I was proud. I had not only completed the task but had done so independently.

def fibnum(maxnum):
num1 = 0
num2 = 0
total = 0

if total == 0:
print(total)
num1 = +1
total = num1 + num2
print(total)

while total <= maxnum:
print(total)
num2 = num1
num1 = total
total = num1 + num2

fibnum(144)

Given that our mobile application was experiencing rapid growth and substantial usage, focusing on mobile automation was my next logical step, but I needed to be familiarized with web automation as well using Selenium. After introduction to Selenium WebDriver, equipping me with web automation skills and giving me basic understanding. Subsequently, I continued with Appium, a powerful tool that allowed me to automate mobile applications for both Android and iOS platforms.

And let’s not forget the Behave (Behavior Driven Development) framework. Its Gherkin-style syntax, based on natural language, promotes collaboration between technical and non-technical team members. Which makes collaboration exceptionally easy.

When I turned to writing the very first test, the choice of our automation stack made the task nearly effortless. The combination of Appium, Behave and Python made writing the test felt almost intuitive. With Appium, I could easily find elements requiring manipulation, while Behave and Python simplified the remaining steps. This is largely due to the straightforward syntax, which closely resembles everyday language. As I recall the test was focused on the profile tab, involving switching between screens, scrolling to sections and tapping on elements to perform verifications. This is where it all came together. It genuinely felt as if I was writing in simple English language to automate the whole process. And I must admit, it felt amazing!

Challenges and Triumphs
While automation started off easy, transitioning wasn’t without challenges. Initial configurations and adjustments can make anyone’s head spin. I have encountered nuances in configuring Appium that weren’t immediately apparent to me. For instance, there was a puzzling test failure even when all IDs were correctly set and elements were well-defined. Thanks to my team’s help and some debugging, we discovered that it was due to differences in our system’s configuration compared to Appium’s settings, specifically related to ‘snapshotMaxDepth: 60’. After figuring out this issue we were able to create a plan to address the issue.

With the extraordinary support from my whole team we unveiled issues together and tackled them one by one. As a team, we had several sessions to address the challenges, share our knowledge and celebrate our little wins. And the satisfaction of seeing automated tests successfully run in nightly regressions was truly rewarding.

Benefits and Impact
One significant advantage, among others, of this transformation was how it empowered me, a transitional QA Automation Engineer. I became a valuable asset in addressing automation maintenance and generating new tests independently. This newfound capability eliminated the need to rely solely on senior QA Automation Engineers for handling new features or failures promptly. By bridging this gap, the automation process gained efficiency and responsiveness.

Continuous Improvement
My journey doesn’t end here. There is much to learn yet and I will continue with practicing, learning new tools and techniques to improve automation skills. This is just the beginning!

Conclusion
Transitioning from Manual QA to QA Automation Engineer empowered me to contribute effectively to our engineering team’s efficiency. Improving and expanding our automation coverage enhances the testing process, allowing us to catch issues early and deliver robust software.

I would encourage any QA Engineer contemplating a similar transition to embrace the learning curve — the rewards are well worth the effort.

--

--