However, with all the coding I've done over the years, I've come to really appreciate the work that software developers do! Software is complex stuff, and developers have come up with great ways to set standards, share repositories, and review each other's work.
The test automation code we write is important; just as important as the code the software developers are writing. Therefore, we should write our code with the same standards the developers use. Here are a few suggestions for coding practices you should adopt:
Your code should live in the same repository as the developers' code.
This is for a few reasons: first, the developers' unit tests reside with the code, so it makes sense to have your integration and UI tests in the same place. Secondly, it's easier to maintain one repository instead of two; and finally, having your code in the same place serves to remind the whole team that test automation is everyone's responsibility.
Write clean code.
When I first got started with test automation, I had absolutely no idea what I was doing. All I had was my manual testing experience and couple of courses in Java and C++. I did a lot of Googling and a lot of guessing as I put together my first Selenium tests. After much work, they ran and (mostly) passed, but boy, were they lousy! I didn't know anything about how to write clean code. Fortunately I had great developers around to teach me how to make my code better.
Here are some of the principles of writing clean code:
- Keep it simple. Always look over your code and ask yourself if there's a simpler way of doing what it is that you are trying to do. Sometimes the obvious solution to a testing problem only becomes clear after you have solved it in a complicated way; now it's time to go back and solve it more elegantly.
- Don't repeat yourself. If there's something you're doing in more than one test- for example, logging in to the application- write a method that you can call instead of putting those steps into every test. Similarly, create a file where you save all of your variables and element locators, and have all of your tests refer to that file. That way if a variable or a locator changes, you can make the change in one place rather than several.
- Be consistent. Consistent code is easier to read. Be consistent with your casing: if you have a variable for the user's first name called "firstName", don't make the variable for the user's last name "LastName". Follow the conventions that your developers are using: if they indent with two spaces, you should too. If they put their opening curly braces on a separate line, you should as well.
- Comment your code. It's not always obvious what test automation code is doing at first glance, and while you might be quite used to the syntax you are using for your tests, your developers might not be familiar with it. Simple comments like "Polling the queue for the delete request" can be really helpful in explaining your intent. Moreover, what might seem really obvious to you now might not be obvious in three months when you need to update the test! Your future self will thank you for the comments you write today.
Like me, you may not have had a thorough grounding in good coding principles. Some of the best software testers I've had the pleasure of working with did not major in Software Engineering. If you did not go through rigorous training in software development, it's important to get feedback from the developers you work with. On my team, the software testers often review and approve each other's code, but I also like to have my code checked by developers to make sure I'm not doing anything unusual or creating steps that could possibly result in a race condition.
Test automation helps the whole team by speeding up the feedback process and freeing testers up to do more exploratory testing. We owe it to our whole team to write quality code that is readable, runs quickly and consistently, and provides valuable feedback!
You may be wondering why the title of this blog post ends with "...". Be sure to check out next week's blog to read the other half of the story!