Case Studies
Hospitality
Setting Up Quality Assurance Team For A Venture Funded Startup
A SaaS company that helps high end hotels integrate many of their different payment gateways into one seamless checkout experience. They needed a way to introduce Quality Assurance into their Software Development Lifecycle.
- Workflow Analysis: Our goal was to analyze the current software development workflow and identify opportunities for shift-left testing. This included reviewing the processes and tools used for requirements gathering, development, testing, and deployment.
- Manual Test Cases: The task was to write the entire manual test cases for both User Interface (UI) and Application Programming Integration (API). Additionally writing test acceptance criteria for current sprint tickets. This ensured the developers were involved in testing earlier.
- UI Automation Framework: We developed two brand new UI Automation Frameworks from scratch using JavaScript and Cypress, which needed both end-to-end and assertion testing coverage. We converted all of the manual test cases into automation scripts up to current development sprint level.
- Component Testing: We introduced component testing for the front end developers using Cypress. The tests immediately yielded results and bugs were caught earlier in the development process.
- API Automation Framework: We set up an API Automation Framework using Postman and Newman, to ensure that the integration with all the different third party providers were tested.
- Production Performance: Our goal was to ensure that the application was behaving properly in a production environment. This meant we needed to test the system with real-time data and simulate different scenarios, such as peak travel periods and high-volume bookings. With the help of Kubernetes we were able to create clusters replicating these peaks and troughs which helped us to understand our system functions per node for such volume.
Overall, we were successfully able to implement the QA process into the development cycle. We used shift-left testing as our guiding north star. We were able to map out various platform test suites and bring their respective test cases to the current sprint level. This resulted in bugs and defects being detected much earlier and giving assurance that what is being released is stable. We are happy to report we exceeded project turnaround time expectations.
Logistics and Supply Chain
Creating New Test Automation Frameworks For One Of The Largest Pallet Providers
One of the largest pallet providers in the World owns a proprietary software which signals the location of each pallet and they needed a more efficient and effective way to test their new pallet tracking system.
We were brought on to lead the effort of replacing the old testing framework. They were using Selenium and Python which were providing unreliable, flaky and slow test results.
- First task was to write all the manual test cases and select a test management tool. We chose Zephyr because it integrates well with Atlassian which was widely used in the company.
- Second task was to create a brand new UI Automation Framework from scratch using JavaScript and Cypress. This framework allowed us to test the user interface of the pallet tracking system, where certain test cases required interacting with a map.
- Third task was to set up a framework and introduce Percy, a visual testing tool. This helped us to catch any visual issues with the User Interface and ensure that it was displaying correctly on all devices.
- Fourth task was to setup API Automation Framework. Since the API was in the process of being upgraded to a new version, we focused on writing tests for the most crucial API endpoints. Hence, combination of Postman and Newman were chosen.
- Fifth task was to ensure that the application was behaving properly in a production environment. This meant we needed an environment which would replicate the production environment as closely as possible. This led to provisioning our own Kubernetes Clusters for Test Automation using TestKube. This allowed us to pull test cases as part of the CI/CD pipeline and run against that test environment.
Overall, we brought the UI automation to current sprint level, removed any test flakiness, ran against a stable cluster, shortened the run time, and helped transition the team into the new testing framework which they found very easy and helpful to use. We are happy to say we exceeded expectation for the turnaround time for this project.
Some Cool Facts
Numbers Speak For Themselves
Airlines
Clearing Out The Test Automation Tech Debt For Multiple Squads In A Global Airline Company
The objective of this project was to clean up the tech debt for test automations across different teams of a global airline company.
To achieve this, we had a deep dive on the priority of the test cases that weren’t already covered in their existing Cypress framework. From there, we established the likely scenarios of these components to cause defects. The process involved collaborating with project managers of different squads and establishing the test cases that were to be automated which were then written in accordance with the acceptance criteria. In total, 1200 test cases were automated.
Some of the things we are proud to share are the challenging functions we wrote to solve some of the major issues:
- Cypress Intercept: Our team made a significant contribution to the automation of manual test cases which were previously utilizing Charles Proxy. By leveraging Cypress’ cy.intercept(), we were able to mock different API responses, facilitating the testing of various network scenarios with ease and control. We tested critical scenarios such as handling 500 error from an API endpoint or slow response from the server. This significantly improved our testing process, enabling us to identify potential issues earlier in the development cycle and reducing the need for manual testing and freeing up at least 30% of QA Engineers’ time.
- DOMParser: We encountered a challenge in making accurate assertions about the presence of uploaded data on a page. Our initial approach, using parent-child relationships in Cypress, was not effective. To overcome this issue, we created a helper function that leveraged the DOMParser to read the HTML body, and JQuery to identify the relevant element. By reading and writing to that element, we were able to make a comparison to the original uploaded data and verify its accuracy. The implementation of this function made our tests more reliable and eliminated any flakiness, resulting in a marked improvement in the overall quality of our tests.
- iFrames: The client was using a 3rd party framework as a part of the web application, which was not automated yet. As Cypress does not have a built-in way of automating 3rd party embedded frameworks, we created custom functions to work with iFrames that allowed us to bypass the 3rd party lock and are able to find an element on the website and automate it. This made it possible for developers to integrate further third-party codes without concern for reliable automation.
- Date Picker: The client had a custom calendar for the customer which displayed prices for the associated date. There were UI automation implemented for this, however the tests failure was high. The flakiness of how the test was automated contributed to the higher rate of failure. The challenge we faced was to accurately pick a specific date out of that custom calendar to search for the price. This was particularly hard as the date’s month and year might not be the current ones.. This meant, we had to create out own custom function which enabled us to cycle through different months of the year to find the date we were looking for and then assert the price for that date. This allowed to efficiently search for dates that was set way in the future without worrying about it failing unnecessarily.
In conclusion, our team made a significant impact on the global airline company’s tech debt for test automations across different teams. With a deep dive into the priority of the test cases, we successfully automated 1200 tests in accordance with the acceptance criteria. Our team was proud to have solved challenging issues such as automating third-party embedded frameworks and accurately asserting the presence of uploaded data. We also tackled the high failure rate of the custom calendar UI automation and made it more reliable by creating a custom function. The implementation of cy.intercept() in automating manual test cases improved the efficiency of the testing process and reduced the need for manual intervention, freeing up time for the QA engineers. Overall, our team’s work has led to a marked improvement in the reliability and quality of the software. The successful completion of this project highlights our team’s expertise and commitment to delivering high-quality results for our clients.