There is always more to learn when it comes to QA and software testing. From staying on top of the latest trends to honing your skills. With strong teams working together in a clear and tidy manner, the road to success is all about each doing his best to assure high-quality work.
Creating a huge software product is always challenging. When several development teams, working together yet separately, are committing to several repositories each day, the possibility of occurring regression is high. In the following post, I will try to illustrate how international teamwork is done well, in terms of assuring high quality for a product
Part of our daily tasks as developers consist of doing different code changes to our product and of course constant automation testing, which is essential to provide a steady and clear process for all teams working together. We cannot afford spending days or even a week in manual testing while more codes are added to the system in construction.
The creation of the “CI environments” now comes into the picture. It is born at the moment when a developer hits the button to create a pull request. In the very first step, the application affected is built and provided (if it is successful – code is compiled, unit tests pass, etc.) as an artifact to the next step where the environment is triggered.
To makes things more efficient, we decided to have a dedicated environment created each time from scratch on top instead of maintaining one QA environment. Some might think that this will be a waste of time or resources, but at the end of the day, it is securing us with a faster process for the QA, thus saving us resources and workload.
End to end testing is the process of validating an application’s workflow from the beginning to the end. This testing methodology is crucial and is aimed at replicating real user scenarios and behaviors so that the system can be validated for the overall functionality of the product in development. The purpose of this adopted approach is to validate the latest code changes, whether they are working or not. At the end of the day, nothing damaged or not functional gets to move on and gets destroyed.
The creation of CI environment is a set of tasks executed for a short period of time providing a base where functional tests are being made to make, consisting of: Database creation tasks – there is a dedicated database for each CI pipeline which is stored on a server and recreated each time when the pipeline is executed. On top of the restored backup, migrations are executed and desired additional data is inserted.
- Resource creation task – with the ARM template each needed resource is created (applications, storage accounts, event hubs, etc.).
- Configuration files updates – as all resources are created dynamically with unique names, the configuration files are updated accordingly.
- Applications deployment – each application taking part in the flow is deployed.
- Tests execution – end-to-end tests are run.
- Test results reporting – the results from functional tests are reported.
- Cleanup tasks – all resources and databases are removed.
From a QA automation perspective, we knew that a robust and easy maintainable framework should be done. In such a huge system under test, we do not want to spend hours debugging our own tests. With the help of a behavior-driven development approach, hundreds of functional tests are created with maximum reuse of code and test steps. It borrows the concept of ubiquitous language, which is a (semi-)formal language that is shared by all members of a software development team — both software developers and non-technical personnel and tests are used as a reference how things work.
A real work-life example is when a new feature is added to the flow with given input and a brand-new outcome result. From a functional perspective, our QA framework is extended with one or two files written in plain English specifying the test scenarios and almost zero code changes behind the test steps.
We end up on a pull request page where each developer can verify by himself if his work breaks things or everything passed smoothly.
Testing automation brings many benefits to our software development lifecycle, allowing us to build better applications with less effort and less time-consuming.
In the end, we are able to deliver high-quality software that was able to be released ahead of schedule, with fewer problems and fewer resources.
About Iliya:
Iliya is a QA Automation Engineer at Zoomd. He currently resides in his home town of Sofia, Bulgaria, where he lives with his wife and two children. He recently completed his master’s degree in “Software Architectures and Quality Assurance” from the University of Information Technologies and Library Studies in Sofia, and when he finds some time off, he enjoys cycling and listening to rock music.