Testing software for faults and failures is an essential part of the software development process, which should be performed continuously during all stages of the process itself. Of course, this is also the case for developing software based on Service-oriented Architectures (SOA). However, although SOA has been an important topic in research and industry, one could notice a lack of tools supporting the developers in setting up testbeds for SOA-based applications. Solutions for testing individual Web services, such as stress tests and functionality tests, do exist. But when it comes to testing software which operates on whole environments of distributed services, such as workflow engines or dynamic registries, the developer needs a flexible facility to set up customized testbeds of services.
With Genesis
we provide a framework
for generating service-based infrastructures, which allows developers
to set up SOA testbeds in a convenient manner. Genesis
combines an approach for automatic generation and deployment of Web
services at the back-end with a programmer-friendly API at the
front-end. Developers can specify functional and non-functional
properties of Web services which can be deployed on-the-fly on remote
hosting environments. Complex behavior of the testbed can be achieved
with various plug-ins which extend the functionality of the individual
Web services and can be steered remotely from the front-end. Therefore,
Genesis allows setting up large-scale testing
infrastructures for complex service-oriented systems.
The architecture of Genesis
(see
Figure below) includes a distributed back-end, hosting the testbeds Web
services, and a single font-end part for controlling the back-end. Via
the frontend it is possible to specify the components and
characteristics of the testbed, while the back-end’s task is to
generate the testbed infrastructure based on this information.
Furthermore, it is possible to integrate Genesis
testbeds into existing service-based infrastructures in order to
incorporate them into the testcases.
Front-end
Genesis provides a Java API for creating and manipulating Web service descriptions based on a simple model and for transferring these to the back-end. The developer is free to utilize this API in his/her own applications. Alternatively, the developer can use the Bean Scripting Framework to integrate Genesis into various scripting languages, such as Jython.
Back-end
At the back-end, the functionality is split into different modules. The most important one is the Web Service Generator which interprets the descriptions created at the front-end and generates real Web service instances from these. The generation of services includes the analysis of the specified properties and message types, analysis of referenced plug-ins extending the services, the generation of corresponding Java code based on this information, and finally the compilation and deployment of the services.
The pluggable extendability of Genesis
allows to establish complex dependencies inside the testbeds, as seen
in real life SOA environments. Each plug-in can specifiy a list of
properties (variables) via which it can be controlled from the
front-end. We provide a few sample implementations of plug-ins, such as
the QOSPlugin simulating various Quality of Service properties, the
BPELPlugin for integrating workflows into the testbed, etc.
The main features of Genesis are:
The Genesis prototype can be downloaded from .
Publications