How to compare WSDL versions in your automated test framework
This post was published on April 24, 2014A colleague of mine posed an interesting question last week. He had a test setup with three different machines on which his application under test was installed and deployed. He wanted to make sure in his test that the web service interface offered by these deployments was exactly the same by comparing the WSDLs associated with each installation. However, the tool he used (Parasoft SOAtest) only supports regression testing of single WSDL instances, i.e., it can validate whether a certain WSDL has been changed over time, but it cannot compare two or more different WSDL instances.
Luckily, SOAtest supports extension of its functionality using scripting, and I found a nice Java API that would do exactly what he asked. In this post, I’ll show you how this is done in Java. In SOAtest, I did it with a Jython script that imported and used the appropriate Java classes, but apart from syntax the solution is the same.
The Java API I used can be found here. The piece of code that executes the comparison is very straightforward:
private static void compareWSDL(){ // configure the log4j logger BasicConfigurator.configure(); // create a new wsdl parser WSDLParser parser = new WSDLParser(); // parse both wsdl documents Definitions wsdl1 = parser.parse("Z:\\Documents\\Bas\\wsdlcompare\\ParaBank.wsdl"); Definitions wsdl2 = parser.parse("Z:\\Documents\\Bas\\wsdlcompare\\ParaBank2.wsdl"); // compare the wsdl documents WsdlDiffGenerator diffGen = new WsdlDiffGenerator(wsdl1, wsdl2); List<Difference> lst = diffGen.compare(); // write the differences to the console for (Difference diff : lst) { System.out.println(diff.dump()); } }
For this example, I used two locally stored copies of a WSDL document where I changed the definition of a single element (I removed the minOccurs=”0″ attribute). The API uses Log4J as the logging engine, so we need to initialize that in our code and add a log4j.properties file to our project:
When we run our code, we can see that the WSDL documents are compared successfully, and that the difference I injected by hand is detected nicely by the WSDL compare tool:
A nice and clean answer to yet another automated testing question, just as it should be.
An example Eclipse project using the pattern described above can be downloaded here.
"