Skip to main content
blog title image

12 minute read - Quora Test Automation Career Advice

Questions and Answers About Software Testing

Feb 25, 2019

Over the years I’ve seen sites crash and burn so I’ve tried to archive content posted on other sites. This post collates answers to questions I answered on Quora.

Q: Can QA testers do unit testing?

A:

That depends on the skill set of the tester.

I can. I’m also a proficient programmer and write applications.

I learned to do this, when I started on some Agile projects a fair few years back, I was a little rusty. I paired with developers to help improve my coding skills. I was able to contribute:

  • suggestions on test conditions,
  • test data to use,
  • risks in the coding approach,
  • “what ifs”

And as we worked on the Unit Tests, I learned more about the programming language in use. I also spent a lot of my spare time reading books on the programming language and practicing to become more proficient and take the lead in the pair as we worked on the code.

If the tester can code, and they are prepared to learn and practice then they can write Unit test code.

Q: How do you record exploratory testing?

A:

I typically just create a log of what I’m thinking and testing.

I have some ideas in a blog post of ways to improve:

I have some blog posts showing examples notes from exploratory testing sessions:

There are also some in the Black Ops Testing archives.

I have created videos of my testing using Camtasia but I find that my testing is usually better when I make text notes rather than video notes.

I also have a couple of courses that are free to my Patreon supporters:

Q: How do I identify fake selenium testers?

A:

Really, this is. How do I do hands on interviews without take home tests.

I generally pair with people.

I want to understand the level of their expertise so that I know where on the team they can add value and how much support they will need.

I choose the following common tasks that I would expect them to do on the real job:

  • review parts of the actual application under test and tell me in general terms how they would automate it, which areas of the application seem risk (or harder) to automate than others, and why
  • build CSS selectors (or XPath) to locate elements of the application, we can test these from the dev tools with the Find functionality in the DOM view
  • review actual test code for existing @Test methods and the abstraction layers and identify what looks good, what could be improved bad, where the risks are in the code.
  • add some synchronisation code to an existing @Test method to make it more robust and then explain how to abstract that synchronisation so it doesn’t have to be copy and pasted into each @Test
  • create some simple @Test methods for part of the application and then refactor it into a simple abstraction layer - whatever they choose it to be.

When you work through this you will see which parts they find easy - then you can quickly move on to the next activity, and you can learn what questions they ask and how familiar they are with the dev tools and libraries.

The only way to be sure is to actually see the person do the activity. And for the person doing the interview to evaluate them correctly, the interviewer also needs to know how to do the activity.

Q: How can I start API testing with Rest-Assured Library?

A:

I have some REST API videos on YouTube and a couple of GitHub projects you can look at:

Q: Where can I find a software testing project (manual testing) for learning real-time scenarios?

A:

You can always practice on your own.

I often use prebuilt virtual machines from Bitnami or Turnkey

Choose an application that seem interesting and start testing.

You can see some examples of this in the Black Ops Testing archive and youtube channel:

I also have a lot of applications to practice testing on:

Also some ebook content which is free to Patreon supporters:

Q: Can manual testers learn to automate?

A:

Yes.

If you’d like a recent example of someone who has successfully done this then check out T J Maher’s blog and writing where he describes the process he went through to change his career trajectory and move into roles with more of a focus automating applications:

Also check out TJ Maher’s Blog

Q: What is better for testing a web application: Protractor or Selenium?

A:

Note: I originally wrote this answer in 2017. Protractor was deprecated in 2023. Selenium WebDriver was still going strong in 2023

Every time I’ve automated Web Applications, when coding in JavaScript, I have used the ‘core’ JavaScript library provided by the WebDriver team WebDriverJS:

I use this because it keeps up to date with the main selenium code base and if you want help on the Selenium forums this one is likely to receive answers there.

This is not your only choice when working with JavaScript:

  • Protractor http://www.protractortest.org/#/
    • created by the Angular JS team
    • designed to be used for Angular apps because it has built in synchronization for Angular applications
    • protractor is built on WebDriverJS

If your application is written using Angular, and you are writing your test execution code in JavaScript and you don’t have much experiencing automating web applications then this might be a good choice because of the default synchronisation and the documentation is based around Angular applications.

This might not be the best choice for non-angular applications because you may prefer more specific synchronisation approaches and the API might not be as flexible as you need.

If you want to use the most up to date version of WebDriverJS then you have a dependency on Protractor updating to use it, but I think this usually happens fairly quickly.

You also have:

You will have to evaluate them to see which:

  • works best in your environment
  • offers and API that fits your coding style

Generally I try to work as close to the core library as possible to have as few dependencies on other projects as I can, and also I don’t find the main WebDriver API hard to use.

You can test Angular applications without Protractor, but you have to write code to synchronise your application effectively.

Since Protractor is open source you can read the source to understand their synchronisation mechanisms if you choose to use a different JavaScript library.

If you prefer coding in another language e.g. Java or C# then look at the download page on selenium hq and start with the official bindings.

If you find them hard to use then you might want to look for a library that sits on top of WebDriver, for that language, which offers a ‘framework’ or higher level abstraction to work with.

The benefits of sticking as close to ‘core’ library as possible are that you will find it easier to switch between different languages when coding WebDriver tests as the APIs are very similar, and you are learning WebDriver, rather than learning a separate framework or library.

Q: When getting rid of a browser, what are the advantages of using taskkill.exe over close method in Selenium?

A:

I can’t really think of any advantages to using taskkill.exe over a close or quit method in Selenium.

If the browser was opened by Selenium then I would try to have Selenium close it.

If the browser is unresponsive after executing selenium code then it may suggest a problem with the application under test making the browser unresponsive, which would imply issues with the application that need to be investigated.

Other issue might be cause by potentially a mismatch between the driver version and the browser version, so the environment used to execute the code from may need to be investigated.

TaskKill.exe would make your selenium code dependent on a Windows environment and would likely prevent your running your selenium execution through a local grid or a cloud grid.

If I was working on a project and saw that the code was using TaskKill.exe to close browsers I would be investigating:

  • what happens if you just use close or quit - i.e. is it really necessary?
  • why people think this is necessary? to explain some of the risks and issues I mention above
  • if it is necessary because quit or close do not terminate the browser session, then what changes to we have to make to our application or environment so that it is not necessary.

You should not really have to use taskkill.exe to close Selenium WebDriver initiated sessions.

Taskkill, or any process termination command, may be necessary if you using it as a temporary workaround because you are experiencing any of the issues I mentioned above. But it should really only exist as a temporary measure until you solve the problem that is causing the close or quit command to not terminate the browser.

Q: What is the best fuzzer (automated software testing tool) to find 0-days? Why?

A:

0-day is a very broad statement.

I tend to use the payload fuzzers in BurpSuite and Zed Attack Proxy, but these require me to identify the target that I’m testing, and the appropriate data scope and range to fuzz.

I suspect you might be more interested in application or file based fuzzers.

Google have introduced a service for fuzzing applications.

github.com/google/oss-fuzz

There are many lists of fuzzers to read through.

New tools are being created for this all the time and there is a constant flood of research on fuzzing:

scholar.google.co.uk/scholar?hl=en&as_sdt=0%2C5&q=fuzzing&btnG=

Since the fuzzers all work at different levels and on different technologies you have to be very specific in your research to make sure you don’t overload yourself with tools (which is all too easy to do in Security Testing)

Q: What is easier, being a QA engineer or a software developer?

A:

People who work to automate applications tend to write a lot of code. In order to write good code to automate application I need to code well and understand programming patterns, TDD, abstraction layers, refactoring… the same skills are required to be good at application development.

Not everyone in testing automates applications. There are many other skills required to test software.

There are also many other roles involved in software development: analysis, management, architecture, requirements, databases, infrastructure, etc. You don’t just have to consider testing.

But none of the above addresses “terrible at coding”. Programming takes a lot of practice, and in order to be good at it you have to enjoy it. Unfortunately questions don’t provide a lot of context so some of the following might not work for you.

  • try a different programming language, perhaps you’re working with language you don’t like
  • try Test Driven Development, perhaps you’re trying to keep too much in your head as you code and aren’t working in small chunks
  • learn refactoring to help you restructure code
  • read a lot of code and programming books, even if you don’t understand it, the more you read it, the more it sinks in
  • watch videos on youtube showing live coding, and as you watch think if you would do it that way or differently
  • read code on Github and see if you understand it, and can identify ways to improve it
  • find online courses, and work through the exercises, but you may need to try many courses until you find an instructors style that works for your approach to learning and the point you are in your experience
  • try coding something fun e.g. I spent some time this weekend coding a Text Adventure Game to practice with some coding patterns
  • try some coding katas, these are small exercises that you might see many answers for that can help you with yours
  • try automating some applications and learning libraries and tools to do that, you might find you enjoy it and that writing test code comes more naturally to you
  • … the point is that if you want any role that involves programming then you need to keep practicing and improve your coding. Otherwise, find a role that doesn’t write code (not automation).

And sadly, none of them are ‘easier’ than each other. They come with different stresses, different skill requirements, and different responsibilities.

When we work in one role we might look at the other roles and perceive them as easier than the one we are doing. But that’s probably because we don’t see all the painful stuff that the other person is going through, and we might not appreciate the skills and experience that they are applying to their role i.e. they might be making it look easy, but when we try it might not be something that matches our current skill levels.

If you have the opportunity to try new roles, then it might prove useful to experiment while you can. I’ve worked as a programmer, tester, manager, analyst, coach, automator and each of these experiences has helped me when I’ve performed the other roles.

A Software Developer is a mix of : programmer, tester, automator, analyst, architect, manager, etc. If we want to become good Software Developers we need to try the other roles.

Hopefully if you keep learning, keep practicing and keep experimenting, you’ll find a role with the mix of responsibilities that matches your skill set, and pushes you such that you keep learning.