Skip to main content

SoapUI - Part 3: Automation

SoapUI can be used as well for automated testing purposes. All the test suites developed through this tool can be executed any way without its user interface, for example using an automated build tool.
The SoapUI test cases can be triggered from a command prompt in several ways: a batch file, a shell script, Maven, etc. This post will focus on Apache Maven (http://maven.apache.org/). I will refer to the release 3.1.1. I suggest the readers to have the basics of Maven and Jenkins (http://jenkins-ci.org/) for a better understanding of this post.
First of all create the pom.xml file for your Maven project. Add the Maven repository from which to download the soapui plugin:

<pluginRepositories>
        <pluginRepository>
            <id>eviwarePluginRepository</id>
            <url>http://www.soapui.org/repository/maven2/</url>
        </pluginRepository>

</pluginRepositories>

Then setup the SoapUI plugin for Maven. We are going to use the SoapUI project created in the previous post (http://googlielmo.blogspot.ie/2014/02/soapui-part-2-testing-soap-web-services.html):

<plugins>
            <plugin>
                <groupId>eviware</groupId>
                <artifactId>maven-soapui-plugin</artifactId>
                <version>4.5.1</version>
                <configuration>
                    <projectFile>WheaterForecastTest-soapui-project.xml</projectFile>
                </configuration>
            </plugin>

</plugins>


The XML file WheaterForecastTest-soapui-project.xml is the SoapUI project contaning the test case(s) you want to execute through Maven (have a look at the previous post for it). The final pom.xml should be something like this:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.blogspot.googlielmo</groupId>
    <artifactId>soapui-example</artifactId>
    <version>1.0-SNAPSHOT</version>
    <pluginRepositories>
        <pluginRepository>
            <id>eviwarePluginRepository</id>
            <url>http://www.soapui.org/repository/maven2/</url>
        </pluginRepository>
    </pluginRepositories>
    <build>
        <plugins>
            <plugin>
                <groupId>eviware</groupId>
                <artifactId>maven-soapui-plugin</artifactId>
                <version>4.5.1</version>
                <configuration>
                    <projectFile>WheaterForecastTest-soapui-project.xml</projectFile>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>


You can run it by a shell command through the following Maven command:

mvn eviware:maven-soapui-plugin:test

If everthing goes fine you should see an output like this:

2014-03-09 20:11:39,111 INFO  [DefaultSoapUICore] initialized soapui-settings from [C:\Users\chief\soapui-settings.xml]
2014-03-09 20:11:40,231 INFO  [WsdlProject] Loaded project from [file:/C:/Guglielmo/Code/Maven/SoapUI/WheaterForecastTest-soapui-project.xml]
2014-03-09 20:11:40,977 INFO  [SoapUITestCaseRunner] Running soapUI tests in project [WheaterForecastTest]
2014-03-09 20:11:40,979 INFO  [SoapUITestCaseRunner] Running Project [WheaterForecastTest], runType = SEQUENTIAL
2014-03-09 20:11:40,999 INFO  [SoapUITestCaseRunner] Running soapUI testcase [GetCitiesByCountry TestCase]
2014-03-09 20:11:41,012 INFO  [SoapUITestCaseRunner] running step [GetCitiesByCountry]
2014-03-09 20:11:41,977 INFO  [SoapUITestCaseRunner] Assertion [Contains] has status VALID

2014-03-09 20:11:41,978 INFO  [SoapUITestCaseRunner] Finished running soapUI testcase [GetCitiesByCountry TestCase], time taken: 945ms, status: FINISHED
2014-03-09 20:11:41,982 INFO  [SoapUITestCaseRunner] Running soapUI testcase [GetWeather TestCase]
2014-03-09 20:11:41,983 INFO  [SoapUITestCaseRunner] running step [GetWeather]
2014-03-09 20:11:42,216 INFO  [SoapUITestCaseRunner] Finished running soapUI testcase [GetWeather TestCase], time taken: 232ms, status: FINISHED
2014-03-09 20:11:42,217 INFO  [SoapUITestCaseRunner] Project [WheaterForecastTest] finished with status [FINISHED] in 1231ms


If you look at the lines in bold, you can notice that the test case GetCitiesByCountry defined in the last post was successfully executed the same way as using the tool UI.
This same action could be automated through a build server like Jenkins. Connect to the Jenkins dashboard and create a new job. The type of this job has to be Build a Maven 2/3 project. The name chosen for this job is SoapUI-WheaterForecast. In order for Jenkins to execute this job you need to have Maven configured for it. Check for it in the Maven section of the Configure Jenkins -> Manage System area. In order to configure the job you need to set the Build section this way:




You need to add the full path of the pom.xml file in your Jenkins server and the same Maven command and params used to run the TestCase from a command line. Save the changes and run manually the job. At the end of the execution go to the jobs console output for this build and you should see the same output as for the run from a command line:



This job can then scheduled the usual way for any Jenkins job.

This is what you should have learned from this example: it's possible to automate the verification and test of APIs using SoapUI. The chances of securing the delivery of high quality APIs will be drastically improved, compared to when testing services using homegrown API clients. This helps to save a lot of time and allows to focus on the real problem, testing, instead of the problem nested creating custom test tools.

Comments

Popular posts from this blog

Exporting InfluxDB data to a CVS file

Sometimes you would need to export a sample of the data from an InfluxDB table to a CSV file (for example to allow a data scientist to do some offline analysis using a tool like Jupyter, Zeppelin or Spark Notebook). It is possible to perform this operation through the influx command line client. This is the general syntax: sudo /usr/bin/influx -database '<database_name>' -host '<hostname>' -username '<username>'  -password '<password>' -execute 'select_statement' -format '<format>' > <file_path>/<file_name>.csv where the format could be csv , json or column . Example: sudo /usr/bin/influx -database 'telegraf' -host 'localhost' -username 'admin'  -password '123456789' -execute 'select * from mem' -format 'csv' > /home/googlielmo/influxdb-export/mem-export.csv

jOOQ: code generation in Eclipse

jOOQ allows code generation from a database schema through ANT tasks, Maven and shell command tools. But if you're working with Eclipse it's easier to create a new Run Configuration to perform this operation. First of all you have to write the usual XML configuration file for the code generation starting from the database: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-2.0.4.xsd">   <jdbc>     <driver>oracle.jdbc.driver.OracleDriver</driver>     <url>jdbc:oracle:thin:@dbhost:1700:DBSID</url>     <user>DB_FTRS</user>     <password>password</password>   </jdbc>   <generator>     <name>org.jooq.util.DefaultGenerator</name>     <database>       <name>org.jooq.util.oracle.OracleDatabase</name>     ...

Turning Python Scripts into Working Web Apps Quickly with Streamlit

 I just realized that I am using Streamlit since almost one year now, posted about in Twitter or LinkedIn several times, but never wrote a blog post about it before. Communication in Data Science and Machine Learning is the key. Being able to showcase work in progress and share results with the business makes the difference. Verbal and non-verbal communication skills are important. Having some tool that could support you in this kind of conversation with a mixed audience that couldn't have a technical background or would like to hear in terms of results and business value would be of great help. I found that Streamlit fits well this scenario. Streamlit is an Open Source (Apache License 2.0) Python framework that turns data or ML scripts into shareable web apps in minutes (no kidding). Python only: no front‑end experience required. To start with Streamlit, just install it through pip (it is available in Anaconda too): pip install streamlit and you are ready to execute the working de...