In our effort to create leading edge technology web applications for the U.S. Air Force Air Mobility Command (AMC), we’ve discovered some challenges developing software of such complex functionality. To complete Agile development sprints and meet release dates, our team of developers have to work together effectively. Within the team, development, integration, and testing need to be coordinated. Following agreed upon processes provides a means for the needed coordination and efficiency. It is important, however, that our development processes do not stifle creativity or prevent the team from meeting customer requirements. In our on-going, advanced Agile software development project, manual regression testing at the end of sprints (to ensure a potentially shippable increment) and prior to each release started to consume significant development resources. SuprTEK’s ADEV teams are leveraging Protractor to create automated regression tests to streamline the testing process for teams using Angular JS, increasing productivity and efficiency.
Agile Testing Requirements
An important feature of our applications is an intuitive, graphical user interface that allows users to quickly digest, interpret, and apply lots of data in order to make information-based decisions quickly and correctly. To provide this, the team chose to write the application in AngularJS to provide a Single Page Application (SPA).
As per Agile methodology, the developed functionality increased with every sprint and every release, so did the resources needed to test the web application’s functionality. The developers wrote unit tests, but we still needed integration and end-to-end testing of our application. With manual testing, the effort to conduct integration and end-to-end testing consumed more and more time and a higher percentage of our development effort with each sprint and each release. It was important to develop automated regression tests to relieve the burden of manual end-to-end testing.
Automating End-to-End and Regression Testing with Protractor
My team chose the Protractor Framework to accomplish automated regression tests. The framework was written for AngularJS applications and provided the capability we needed for our testing requirements. The framework is written on top of WebDriverJS and Selenium Server, which provides a powerful testing capability. In addition, Protractor can be used with Selenium Grid to run multiple web browsers simultaneously. This provides the capability to do cross-browser testing.
Our experience with the Protractor Framework has been very positive. Developers can run the Protractor test suite against their branch before merging it into the development branch. This provides quick feedback to each developer in case any changes they have made breaks the functionality in any of our required browsers. It would be very time-consuming to expect developers to accomplish this level of regression testing manually, especially against each target browser.
While implementing end-to-end and regression tests using the Protractor Framework has saved a lot of testing time, it required a significant development effort from the team to create the tests. However, there will be a continual payback for these efforts during the software development lifecycle. In addition to the development of the automated tests themselves, creation of test data must also be considered. We found that mocking the data services was important as well as creating the test data to be passed through the services.
Overall, the effort required to implement automated testing using Protractor has been highly beneficial through decreasing the time that had to be devoted to manual testing, plus the additional benefit of finding defects early in the development process. While it does require substantial development effort in creating and validating the tests, the payback in saved time and effort over the course of developing a web app, especially as functionality and complexity increases, will be a boon to the team’s effectiveness and productivity.
Mark Lynch is an Agile Team Lead for the ADEV program. He has been involved with software development and management for over 10 years, and he has a PhD in Engineering Management from Missouri University of Science and Technology.