If you’re a DevOps engineer, you might not think of software testing as a major part of your job. After all, the core mission of DevOps is to combine development and IT operations; testing and quality assurance are not usually a central part of the DevOps conversation (unless, of course, you are talking about QAOps).
This does not mean, however, that DevOps engineers shouldn’t be thinking about software testing, too. It may not be their primary focus, but they should understand the fundamentals of testing, and know how and where they can contribute to QA.
Keep reading for an overview of what DevOps engineers should know about software testing — especially automated software testing, which is essential for achieving the speed and consistency that DevOps software delivery demands.
One important skill that all DevOps engineers should perfect is the ability to identify a test that needs to be automated. We all know the benefits of automating an application test — it takes less time to execute, eliminates the potential for human error that exists when running a test manually, and it allows us to find bugs earlier in the development lifecycle through continuous testing practices. That being said, there likely isn’t time to automate every test utilized by your organization.
Automating a test requires time for design and development and adds to overhead for the development team in the form of script maintenance. Whenever a feature or component is altered in even the slightest fashion, the test script must be analyzed for validity and possibly refactored. Thus, it’s critical that the DevOps engineers be able to make the distinction of whether or not it’s a priority to automate a particular test. Ask yourself the following when deciding which tests to automate:
How frequently will the test run? In some instances, it will benefit the organization to validate a particular feature with each application build. This is often the case with critical application functionality, and in these instances, it almost always makes sense to automate. This automation will likely save the organization time while ensuring that a feature critical to the application is in working order.
How long does it take to perform this test manually? Some tests take a long time to perform manually. In this instance, it should be a priority to automate where possible. The overhead in design and development will be offset by the time saved due to quicker test execution.
Has this already been tested? Redundancy should be avoided at all costs. Imagine the scenario where several automated tests validate the same feature by proxy. If a bug were to be found, all of these tests would fail. We don’t want one bug to result in a developer debugging several failed tests — so be sure to take this into consideration when determining the necessity of a particular test script.
Many organizations leverage several automated testing frameworks to meet their needs, and a good DevOps engineer should develop a familiarity with all of them.
A high level of proficiency with these frameworks provides several key benefits for both the team and the engineer. For one, the engineer will be able to cut down on the amount of time it takes to develop and maintain the test scripts. Writing quality code takes less time when the developer isn’t dealing with a learning curve.
In addition, familiarity will cut down on the amount of time it takes to debug a failed script. When a DevOps engineer is comfortable with the framework used to write the script, they can move quickly to determine why it failed, resulting in prompt identification of the bug within the code base. This results in a more rapid resolution of software issues and significantly adds to the overall value the DevOps engineer brings to the organization.
Let’s consider testing strategies such as A/B testing and performance testing, both of which lead to resulting test data that requires skilled analysis. The results of this analysis can often lead to a significant, positive impact on the application. But this is only the case when the DevOps engineer knows how to effectively utilize the test data being produced.
To effectively analyze this data, a DevOps engineer needs to familiarize themselves with the individual metrics being recorded. And from these metrics they need to be able to draw the types of conclusions that allow the development staff to make the most of their development time — that is, enabling the developers to focus upon potential improvements to the application that will have the greatest impact on the quality of the application.
A final skill that all DevOps engineers should seek to fine-tune is their ability to act as an agent for innovation and progress. In the specific case of automated testing, this includes staying up-to-date on things such as frameworks and tools that could help to better their application testing process.
Choosing a starting point for potential innovation can be difficult. One possible way to go about this would be to analyze the current process and detect the points that result in distress for the team. Maybe this means researching the best options for a cloud-based testing infrastructure because the current infrastructure isn’t getting the job done. Or maybe a new tool for performance testing would better suit their needs. Whatever it may be, a DevOps engineer should continue to think ahead and utilize a portion of their time to flesh out potential improvements to their current process.
In the world of DevOps, automated software testing is far from optional. The value it provides in the form of higher software quality and faster speed of delivery make it an essential part of the software development pipeline. Because of this, DevOps engineers need to build their skills in the subject to be an invaluable member of their team. Demonstrating expertise in skills, such as determining which tests require automation and effective test data analysis can help any DevOps engineer to provide value to the implementation of an automated software testing strategy.