Programming Knowledge for Automation Testers

I would like to know, to what depth should an automation tester be able to code.
[ I am using JavaScript, with Webdriver IO and practising with hacker rank & Leetcode ]
Thanks !

2 Likes

The answer here can be very broad. You can just know the JavaScript-CORE principles some OOP and such and you’ll be good for test automation. It really depends on what you mean with "automation tester’ - if you mean just writing some assertions, then this would be fine.

But if you are going to edit/develop your own framework, more knowledge is required.
If you are going to review and write unit tests, that’s another story. (But I doubt this is the case)

Then there is Git, and pipeline management, that’s probably also something you’ll have to learn.

1 Like

I would like to know, to what depth should an automation tester be able to code.

To the extent that you want to and are able to, I would say. This means two things:

  • If you do not like coding, or not beyond a certain level, stop there. Do give yourself a chance and try it, but if you don’t like it, stop coding and (learn and) do something else. There is plenty of demand for IT skills and no need to learn to code to make some more money but be miserable. You can still work with automation in a different way if you want, for instance write feature files (also technically these should really be requirements), or perhaps only write step (Cucumber) definitions and leave the rest to someone else.
  • If you find you have less talent for working with code than for testing or some other role, that is fine. Do what you can be good at if you want to enjoy it and be successful at it.

The reason behind this advice is simple: Automation only has lasting value when done well, just as with production code. Much automation never worked well or not for long because it was not done well, often because the skills were lacking. I feel that learning to code just to get a better CV is a poor career choice. It is unfortunate that automators are valued more and good testers are more or less required to do automation if it does not make them happy.

One additional tip: If you learn to code, see if someone can coach you in it, like working with a dev in your team to understand things quicker and better.

Test code is still code. As Kristof said, if you’re just hacking some scripts for your own temporary use, that’s very different from the skills and fundamentals necessary to write and maintain a test framework and suite of automated tests.

Unfortunately, many testers writing code don’t have those fundamentals, which I think is part of why automation can get such a bad rap about flakiness and lack of value. It also makes it very difficult to recruit and hire Software Engineer in Test positions, where the expectation is that the candidate has programming skills comparable to a developers, because there are many applicants who picked up some Java hacking Selenium tests but don’t know how to write clean, performant, reliable, readable, maintainable code.

If you (or future readers) are interested in learning programming fundamentals, not just “how to code”, I highly recommend the following online course from MIT: https://www.edx.org/learn/computer-programming/massachusetts-institute-of-technology-introduction-to-computer-science-and-programming-7.

1 Like

There aint many good troubleshooters that also are programming lovers. There are some, but being a good troubleshooter does NOT entail you being a programming lover. If you’re a good troubleshooter you will most probably be a reasonable GOOD programmer but good programming requires programming love. At least, my 25c after three decades being a tester, a test leader and manager for programmers.

Broken up by role, I would expect a brand new Jr. QE in automation to be able to learn a framework and write tests in it. I’d expect them to learn enough programming to handle a page object or whatever other basics the framework needs. They should be able to fix their own test cases.

An “Engineer II” or someone on the brink of seniority should have a deeper understanding of the frameworks they support and the code that is used. I’d expect them to be able to write supporting methods that aren’t just test cases. They should be able to perform a code review and have a working knowledge of code best practices.

I would expect a senior automation engineer to have the same skillset as a software engineer, but with an emphasis on test. Seniors are writing the frameworks (or modifying them), creating code tools for the rest of the QE org, and create code solutions to automate difficult-to-deal-with integrations.

1 Like

Simply put, a software tester should be as proficient in coding as a developer with equivalent years of experience.
There are some exceptions and nuances, but this is the general rule of thumb - software testing is a specialization of software development.

That is not remotely true and can be a damaging opinion to present to many testers that have been unable to adopt the technical skill required for test automation.

Software testing is a parallel skillset to software development. It requires a much broader set of tech and soft skills. I have hired and worked with testers with zero technical skills that are a genuine asset to the delivery of robust software to the end user.

To answer the original question, if the role is specifically automation tester - and I would argue that this is a complete misnomer - the tester should be at least memory proficient in one language or have an intermediate grasp of multiple. This will allow the smooth adaptation to whatever test scripts/frameworks you’ll be put in charge of.

Differing opinions here and it reflects the diversity of SW development organisations. For many companies it probably makes sense to require high programming skills from testers - if automation is what it´s all about. While other organisations might have competely different needs. During my 30+ ys in the business I have seen both.

2 Likes

As I mentioned, there are exceptions. It is important, though, to remember that they are exceptions.
Let’s have a look on activities that a tester should participate in:

  • requirements review
  • Design (and code) review
  • test planning
  • test execution
  • investigating failures and debugging.
  • other stuff, varies by place.

A tester that is not a proficient coder will be less effective during design review and test planning, and his ability to execute tests will be limited. Investigating a failure in a piece of software is something that requires at least a good understanding of code - following stack traces, looking at the source code for log message origins and tracing the specific commit that has introduced the failure.

Even without considering things like creating and maintaining a system-test framework, integrating automated gates to the different pipelines and helping build a good SDLC, only the activities mentioned above require considerable amount of coding know-how.
The only activity listed here not impeded by code illiteracy is requirements review.

Now, it doesn’t mean that a tester who can’t code is useless. There are ways to compensate for every single missing skill for just about any job (ok, perhaps a lifeguard can’t substitute swimming, but I hope you’ll forgive me for this hyperbole) and there are a lot of good testers that lack coding skills and still contribute to the places they are in. In addition to that, there are also quite a few underqualified testers with several years of “experience” under their belt. It’s not as bad as the joke says about 99% of lawyers ruining the reputation of the entire profession, but at least in my environment, it’s well over 70%. For most training programs I’ve seen for testers, picking a graduate of those programs is equivalent, if not worse, than picking a random person with a random B.A. or B.Sc.

I have been doing automation on and off for a few years now. Honestly, with Google and stackoverflow and/or similar sites and even chatGPT, coding has become much easier (when compared to 15, 20 years ago).

Having a testing mind set is the most important part. You want to first identify what you are testing, how you want to test and where/when you are testing.

Once you have some ideas, you can just start googling for ideas.

However, back to your questions, I think you need to be aware of the following:

Data structures (lists, dictionary, etc) and LINQ - a lot of time you are going thru UI, querying API to get some data and manipulating said data, which often boils down to a list/dictionary of something.

Object oriented programming / page object model - to me, this is abstraction / refractoring code. It requires practice and maybe some extra reading.

Framework - going with whichever the most popular one for the programming language you are using is probably the easiest.

Think pipelines - the best tests are useless if you don’t execute them. So make sure to have a place to run the tests.

I personally haven’t come across a need for advanced algorithms. Then again, I don’t really deal with large scale. If something takes an extra minute or ten, I am not too bother. Obviously this depends on what you are automating.

When I think of automation for testers I think of tools that the testers can use, testers with significant tooling knowledge. But the breadth of expertise differs per domain, business, company, tech stack, maturity of environment, etc…
Another name more appropriate for it would be Software Development Engineer in Test.

Examples of tool types by scope that this Engineer should be able to manage:

  • code inspections
  • security or performance scanners
  • stress, endurance, performance scripts
  • API schema, data quality, integration checks,
  • Unit checks or module integration checks
  • Data query & scripts
  • GUI automated scenarios checks
  • production system monitoring, log processing, analytics
  • tool building for developers
  • server/dev environment scripting-configuration
  • CI/CD and containers setup

These are mentioned in job descriptions as: Software Development Engineer in Test, Senior Quality Engineer, Senior Engineer - Automation, Automation Engineer, Senior Engineer(Test), Test Engineer;

Job descriptions example in regards to specific automation in different domains/businesses
Test Engineer

  • Confirmed Core skills as a test engineer in one of the following testing frameworks: Cucumber, Jenkins, Selenium, Protractor, Jasmine, Jest, Cypress, …
  • Good grasp on core Java and the Java-based technology stack in general
  • Will be considered as an advantage, the knowledge of: Docker, Kubernetes, AngularJS, Javascript, SonarQube, Kibana, Bamboo, Gatling, …
  • Coach developers towards best practices in automation testing: Performance testing, Stress testing, Regression testing
  • Work closely with our DEVOPS engineers in order to improve integration of automation tests into test containers

Automation Tester

  • You are proficient in, at least, one modern programming language such as Java, Groovy, Scala - able to write and run simple unit tests
  • You have good knowledge with some of the following technologies : Java, J2EE, Cucumber, Jira, Jenkins, Soap UI, Cypress, Postman, Xray, Selenium, Katalon
  • You perform automation testing; implement API, and microservices; develop automation scripts
  • You perform Technical testing, Integration testing and Load/Performance testing

Test Automation Engineer

  • Hands-on experience required with : automation tools, Azure DevOps, Jira Software, HP ALM, JMeter, Dynatrace, Cucumber, Jenkins,…
  • Understanding of HW/SW architecture and interoperability of complex systems, such as client/server architectures, microservices patterns, API development and security
  • Experience with testing in an agile workflow utilizing ATDD/ BDD best practices in a continuous integration environment
  • 3y+ experience in software development and test automation with exposure to web services and API testing, including security
  • Experience with automated testing tools, test data management, data analysis and statistics.

QA Test Automation Engineer

  • Strong proficiency in programming languages such as Python
  • Deep experience working on Linux
  • Relevant experience in testing and CI/CD (Devops) / pipeline setup and management.
  • Proficiency in scripting languages such as Python, Bash, or Ruby.
  • Knowledge of Kubernetes, Docker, and microservice design/development
  • Experience with test automation tools and frameworks (e.g., Selenium, TestNG, JUnit).
  • Design and develop automated test scripts for functional, regression, and performance testing.
  • Design, implement, and maintain continuous integration and continuous deployment (CI/CD) pipelines.

I think the trend is going towards developer/devops skills so you have to specialize as such. There are less relevant the testing skills from what I have seen in the jobs in the past several months.
So what I’d do if I’d want to get into this direction is to get the knowledge that a developer/devops person would.

For the developers, these jobs should be a serious career alternative, as the salaries are at least at the same level, most of the time even higher than they would get as a developer.

1 Like