By Isaac Sacolick
Contributing Editor, InfoWorld |
If you’re developing applications that connect to multiple microservices, software-as-a-service (SaaS) APIs, legacy systems, and other third-party services, creating a robust testing environment can be tricky. For example, suppose one API you are validating is to a microservice your team developed. In that case, you probably have devops capabilities, including continuous integration and continuous delivery (CI/CD), infrastructure as code, and tools to create test data sets to enable a testing environment for this service. However, even with these capabilities, it can become costly to spin up multiple testing services when teams develop many cloud-native applications and microservices.
If it’s a third-party API, SaaS, or data stream, you may have to rely on that service’s testing infrastructure and capabilities. Although these test environments should support the production system’s functionality, they may not have a complete data set, and putting them under load to support performance testing may violate the terms of service or be expensive.
Service and API virtualization platforms aim to address these complexities by creating and simulating API and service endpoints. Instead of spinning up a testing environment, the service virtualization platform serves as the endpoints for testing downstream applications and composite services, and it responds to a connecting application’s or service’s requests and transactions.
If you’re working with only a few APIs, API mocking may be a good enough practice for simulating endpoints, and tools like Mockito, JMock, or WireMock are Java options. But once you have many development teams, growing APIs, or complex test data sets, a more scalable approach like service virtualization is needed. Furthermore, if you are testing apps that process credit cards, connect to bill paying services, or perform other complex transactions, then service virtualization platforms enable validation against a wider breadth of user experiences and error scenarios.
I spoke with Anna Ramadoss, a cloud engineer in financial services, about using a service virtualization platform. She says, “Service virtualization, once mainstream on the teams, thins the line between the main and dependent systems. Updates are immediate, and the delivery timelines get way quicker. The result is a well-crafted system with quicker updates to the market. It can also reduce infrastructure needs and costs.”
Many organizations are looking to shift-left their testing efforts to identify and resolve issues faster. But what happens when a testing environment isn’t available for dependent services?
It’s natural for developers to circumvent blocks and impediments to their engineering efforts. When developing applications, should the developers wait for an API’s testing infrastructure and capabilities, or are they more likely to push this testing until later in the development process? Even more problematic, will developers make assumptions on an API’s behaviors and then be forced to resolve defects later in the development process, or worse, when they are found in production?
Instituting a service virtualization platform and requiring service virtualization as a development standard has many benefits, especially for teams that require extensive testing capabilities against many APIs. Here are several advantages to using a service virtualization platform to help shift-left testing:
By solving a common testing infrastructure challenge, teams can use a service virtualization platform’s capabilities to institute new testing scenarios earlier in the development process.
Platform providers suggest other use cases. For example, SmartBear recommends that development teams use service virtualization to enhance security testing, automate different testing scenarios by message types, and support iterative designs. Parasoft recommends using service virtualization to test against malformed data responses, simulate high latency, or validate responses to larger payloads. Broadcom Service Virtualization (formally CA DevTest) advises development teams to chain tests into multistep transactions and continuously validate business workflows.
Ramadoss advises development teams to determine their testing requirements to see if API virtualization is sufficient, or if the more generalized service validation is required. For example, she says, “Service virtualization extends to TCP-based protocols to support services from credit bureaus like TransUnion, Equifax, and Experian.” Other protocols that may be needed include database (JDBC), middleware (JMS, Rabbit MQ, and others), and mainframe protocols (CICS and others).
I spoke to Shamim Ahmed, devops CTO at Broadcom, about how devops organizations use service virtualization in virtual service environments. He says, “As more organizations evolve to component architectures for their software systems, we see an increasing trend towards adoption of microservices for development and containerization for deployment. To support this trend, virtual services can be packaged and deployed in containers, instantiated on-demand, and decommissioned when no longer needed.”
Platforms have different capabilities to create service endpoints, and here are the common approaches:
After creating endpoints, platforms generally enable connecting to test data sources, uploading test data, or automating test data generation. Generating test data is very useful when validating forms or document uploads and processing complex transactions. It is also a more secure way to create mock data sets on personally identifiable information (PII) such as names, Social Security numbers, or credit card numbers.
Once there are service endpoints, service virtualization platforms offer development kits, IDE plug-ins, and CI/CD tool plug-ins as different ways to interface and leverage them. Development teams who target frequent deployments can improve continuous testing practices by having more API endpoints available and increasing the breadth of test data sets.
Agile development teams that use service virtualization platforms and mature continuous testing practices should consider several best practices, such as creating negative test cases and training the technical staff. Some best practices for accelerating testing cycles include defining infrastructure requirements, securing virtualized services, and updating systems regularly. Leaders should also seek tangible business benefits such as bringing new applications to production faster and reducing costs.
As more organizations modernize applications for the cloud, develop microservices, and integrate with many SaaS platforms, service virtualization is a critical platform capability to support robust and continuous testing.
Isaac Sacolick is president of StarCIO and the author of the Amazon bestseller Driving Digital: The Leader’s Guide to Business Transformation through Technology, which covers many practices such as agile planning, devops, and data science that are critical to successful digital transformation programs. Sacolick is a recognized top social CIO and digital transformation influencer. He has published more than 700 articles at InfoWorld.com, CIO.com, his blog Social, Agile, and Transformation, and other sites.
Copyright © 2021 IDG Communications, Inc.
Copyright © 2021 IDG Communications, Inc.
By Isaac Sacolick