I have a couple of technical tests that I require as part of my hiring process for testers, depending on the role that they are applying for. There are various public testing sites available for automation practice. I picked two. One that is focused on UI testing, and another on API testing. I require that candidates provide, in any framework or language they are comfortable with to perform at least one positive and one negative test for the API site, and if they are applying for a position that has UI testing, also for the UI site as well. This has to be done before I will interview them at all. I’ll review their submission, and determine whether to go forward from there.
Some folks will claim years of test automation experience, but will then submit code that is completely disorganized, halfway commented out, no noticeable structure or standards followed at all. I am not at all interested in those folks. It’s a waste of both of our time to interview. This doesn’t have to be perfect, or great code. What I am looking for is some form of organization, some form of understanding of the automation process, and development principles in practice. Assuming there are no major issues here, I will proceed with the interview.
During a technical portion, we will review their submission. I will take notes about their choices and ask them questions about why something was implemented one way versus another. Most of the times, the implementations the candidates do are nearly identical. Most candidates will try to use some form of gherkin approach, and in most cases, it’s nearly the same code, with nearly identical assertions, with minor variances, and usually the same junior level of implementation, even when they say they have 5-10 years of automation experience.
I will ask them about making some change, asking what would happen if we did some trivial thing. In many cases, the change is very very simple. There is usually some form of unnecessary duplication in the code, and when I spot that in my review, I will ask them how we can reduce it, in the form of, “If we needed to change this for some reason, how can we take this section and that section and consolidated it, and only need to change it once?” All I tend to look for in this case is a response about using a method. Sometimes there might be variables involved. Simple object oriented approach, and most candidates can’t answer it. When that is the case, I know that they don’t understand some of the basic principles that I need from them.
I may also, especially for back end testing positions, give them a small SQL example to implement. There is a site that one of my people found: https://www.db-fiddle.com. I have used that to setup a couple of small tables. The info on the tables is all there for them to see, from creation to insertions. There is a relation between one table and the other two. I ask them to write a query that requires joining some information on the tables. I want them to walk me through their understanding the tables, ask any questions they have about their relation, and then show me they can write an SQL query. I gave this test to several folks, with just some text so they didn’t have the tables built on their own at first, including people that don’t use SQL regularly, before I started using it, and every one of them solved it on their own in about thirty minutes, so I assumed that other folks that have back end testing experience and say they use SQL every day should be able to breeze through it. Most of them can’t. I don’t mind so much that they can’t generate code on the spot. Interviews are stressful, and it can be hard to do that. I do mind when they can’t talk through how to solve it. Some will not ask questions about the relations, or even make an attempt with pseudo code. I would find those responses acceptable. Not doing that though, tells me that they will struggle with asking for help, or verbalizing when they are struggling with something.
I used to be against take home tests and I absolutely abhor any organization that tries to ask data structure questions, manipulating strings or arrays like LeetCode style things. Those are impractical and focused on the wrong things. I could not care less if a test is 5% faster because of this implementation vs that. I care very much that someone who has worked in test automation can actually write some automated tests, in an organized, maintainable fashion, and be able to talk about it a little. I don’t have to agree with their choices, I just want to know that they thought about what they were doing, and didn’t just follow some guide without understanding it.