DevOps and Testing
What is DevOps?
The word 'DevOps' is a combination of two words/teams/processes: 'development' and 'operations'.
It is a collaboration between Development and Operations Team to deploy code to production faster in an automated & repeatable way.
It is a software development methodology which looks to integrate all the software development functions from development to operations within the same cycle. It is expected to have a high level of co-ordination between the Development, Testing and Operations team in order to build a faster and reliable software.
Involvement of testing in DevOps
Involvement of testing in building a product has evolved over the period of time. Traditionally, during the use of waterfall model, the testing came into picture at a later stage of the project build. Thus, the defects used to get uncovered at a very late stage and would increase the fixing cost. In order to overcome this drawback of waterfall model, the V-model was evolved and the testing activity would run parallel to the development activity. Thus, minimizing the time of defect detection and fix.
The recent agile model of development is the further enhancement to the above model where the development efforts are broken down in to short series of iterations normally lasting for 2-3 weeks. Here, the development and testing teams work together to achieve a quality product. Testers are a part of the development team.
DevOps takes the Agile model a step further by bringing closer the release and deployment activities to those of development and testing. Now the build and release processes are automated and thus the product is given to the testing team almost parallel to the development, for their test cycles. Due to the automation in the build process, the deployment time in the testing environment is reduced. If this is followed by automation in test cycles as well, the identification of defects is faster and will also save time in fixing the same.
Testing strategy in DevOps
1. Setting up of environment:
A separate testing environment should be set up for deploying and testing the latest build. Appropriate build are deployment scripts should be generated to automate this process.
2. Identification of Test Cases for a build
The Dev and QA Team work parallelly, thus the communication gap is reduced. They should sit together and identify the areas that are affected in a particular build, so that testing team can select the related test cases to be executed for that build.
3. Automation of sanity test cases
The Testing Team should identify the basic sanity test cases and automate them with appropriate tools, in order to execute them on across various cross platforms ( or cross browser in case of web applications) environments.
4. Parallel execution of test scripts
Testing teams should plan parallel execution of test cycles by writing appropriate scripts, which will help in reducing the manual execution of test cases, on different platforms.
5. Performance Testing
Testers should not only focus on Functional Testing, but they should also think of Performance testing along with the basic security testing.
6. Logging of defects
Appropriate defect loggings tools should be used to report the defects found in different test runs. Also, the blocker or critical defects need to be logged and fixed before the build is deployed for production.
7. Regression Testing
The testing teams should identify the appropriate regression test cases to be executed on the defect fix build. They can even automate these test cases with the help of appropriate tools to reduce time in regression testing.
8. Exit criteria
While creating a testing strategy, an appropriate exit criterion has to be set for each run, in order to take a decision on go-no-go to production.
Automation of testing in DevOps
Choice of tools and technologies become ever so important in the DevOps model. The choice of tools allows an organization’s ability to deliver applications and services at high velocity. There is a greater emphasis on automated testing in DevOps so as to create a culture where code can be pushed down the systems quickly and with confidence. Thus, Testers are expected to master the art of building solutions with continuous integration/continuous delivery tools such as Jenkins, Bamboo and Team City. Extensive experience in Java, Selenium Web Driver, Selenium Grid, Junit, TestNG and Maven / Ant or C#, TFS and MS Build etc. is preferable.
Opportunities in DevOps Testing
With the recent study on internet it is found that majority of the companies are keen to adopt DevOps methodology and thus it will open doors for DevOps Testing for Test Engineers.
Testers are now expected to have at least the following knowledge and skills to be able to effectively carry out testing activities
· Basic networking knowledge
· Basic Unix/Shell scripting, e.g. bash, python
· Continuous Integration/Continuous Delivery e.g. Jenkins,
· Performance testing tools such as JMeter or Gatling
· Ready for Operations and Resilience Testing
· Querying monitoring tools such as Splunk
· Clouds services, e.g. AWS, Azure
· Knowledge of containers, Docker, Kubernetes
Conclusion
The main agenda of DevOps testing is to derive quality outcomes all along the software development life cycle (SDLC) and beyond.
Continuous integration and Automation are the key to successful implementation of DevOps model.
Thus, DevOps helps to increase an organization's speed to deliver applications and services.