See what API testing solution came out on top in the GigaOm Radar Report. Get your free analyst report >>

See what API testing solution came out on top in the GigaOm Radar Report. Get your free analyst report >>
Jump to Section
Continuous integration is merging all developers' working copies to a shared mainline. This process makes software development more accessible, faster, and less risky for developers. Read this article to understand how to configure SOAtest to execute functional regression testing as part of CI.
Jump to Section
Jump to Section
A regression is defined as “a trend or shift toward a lower or less than perfect state,” which is what we’re all trying to avoid when developing software. Regression testing discovers defects that creep into our software as we add new features, fix bugs, or otherwise change the application.
Regression testing is a common method that most software development processes use to double-check the functionality of software after making modifications to it. These tests determine whether the new modifications affect the software’s current functionality. Of course, new tests are needed for new functionality. Regression tests make sure what is already tested remains functional.
Regression testing plays a vital role in continuous integration (CI) in software development by ensuring that the newly integrated code does not break existing functionality or introduce regressions. These tests provide the rapid feedback essential in CI by detecting defects in newly integrated code so they can be quickly identified and resolved before they impact the stability of the software.
Regression testing includes functional testing. In practice, most functional tests become regression tests over time. The big difference is the timing and objective of these tests.
Functional testing is typically performed during development when new features are being developed, implemented, and tested. It focuses on specific functions, features, or use cases of the software to verify if they behave as expected. It may involve various testing techniques like unit testing, API testing, UI testing, and others.
Regression testing, on the other hand, is performed during development as part of the CI pipeline and/or after important development milestones, such as at the end of a sprint or a release cycle. Regression tests are automated as much as possible so that they can be repeatable and efficient, and they include both functional and nonfunctional tests. More on that below.
Regression testing benefits significantly from automation, and thus tools designed to support the practice also support the automation of all types of testing. These tools help automate the execution of test cases that verify software functionality, collate and analyze results, and report on any regression issues. Here are some commonly used classes of software automation tools for functional regression testing.
These types of tools mentioned are a subset of the many different tools that may be needed to fully validate an application. It’s critical these tools work together seamlessly in order to facilitate the CI/CD pipeline.
CI is a well-understood, well-adopted practice and a necessary first step to significantly improve the velocity of application delivery. It allows developers to push their changes directly into a master branch of source code. A single developer can potentially push many changes to the master branch throughout a single day. To ensure that the master branch is pristine, buildable, and production-grade, it’s critical to have appropriate test cases for every change, since it serves as the golden copy of source code for the application.
Let’s dive into how to configure Parasoft SOAtest to execute functional testing and regression testing as part of a continuous integration process. We’ll go over the steps to configure Parasoft SOAtest with Jenkins, a popular automation platform using the open source Parabank demo application and deploy it using Docker to keep things simple.
The diagram below shows the workflow described in this article. Follow the steps from left to right.
Admittedly, this isn’t quite in the spirit of true continuous integration since we’re starting with a pre-built Docker image. But this saves us the trouble of building Parabank with Maven and installing and configuring Tomcat/Java.
The diagram below shows a more realistic, real-world diagram of CI. As soon as a developer checks source code into GitHub, we want to run necessary regression tests and any new functional test cases to verify that the application is still in a good state even after the developer’s changes.
A source code change in GitHub automatically triggers a build in Jenkins, and Jenkins kicks off a Maven build stage, which executes any static code analysis and JUnit tests and builds our application. If all unit tests pass, then the packaged application, parabank.war, is deployed to an application server—in this case, Tomcat—as a part of the Deploy stage. SOAtest then kicks off the Test stage and runs regression tests and functional tests.
Only after the unit tests and black box test cases pass during SOAtest execution are the developer’s original changes considered good.
Let’s go over the prerequisites and steps to configure the process in the first diagram.
If we want our Jenkins build to fail due to SOAtest test failures, we add the -fail flag when we invoke soatestcli. Like this:
soatestcli.exe -fail -data %TEMP_WORKSPACE_PATH% -resource /Parabank -config “builtin://Demo Configuration” -localsettings %LOCALSETTINGS_PATH%
If you open the test in the SOAtest Desktop UI, you’ll find out that this test failure is primarily a test data and test environment configuration issue. The Loan Processor Service declined a loan that it should have approved.
Implementing continuous integration into your software development process significantly increases the speed of application delivery. Automated solutions like SOAtest offer a scalable and efficient regression testing strategy with the ability to execute test cases that verify software functionality, collate and analyze results, and report any regression issues. The combination helps teams reach a greater release velocity, improve testing productivity, and ensure high test coverage.