Contents Introduction.............................................................................................3 Why SoapUI?..................................................................................................... 3 Functional testing........................................................................................ 3 What is an API?................................................................................................. 4 What is a Web Service?..................................................................................... 4 SOAP.......................................................................................................... 5 REST.......................................................................................................... 5 Testing APIs....................................................................................................... 5 No graphical user interface......................................................................... 5 Request and response................................................................................ 6 Exploring............................................................................................................ 6 Getting started........................................................................................7 Installing............................................................................................................. 7 Your first project................................................................................................. 8 Add a test suite................................................................................................ 13 Add a test......................................................................................................... 14 Add an assertion.............................................................................................. 17 Run the test..................................................................................................... 19 Run the test suite............................................................................................. 19 Further exploration........................................................................................... 20 Create tests..........................................................................................20 Verify a range................................................................................................... 21 Verify response time........................................................................................ 25 Verify schema compliance............................................................................... 25 Go pro: Point and click testing......................................................................... 26 Verify a range............................................................................................ 26 Data driven testing...............................................................................28 Go pro: Data source out of the box.................................................................. 29 Create a data source................................................................................ 29 Create a test with parameters................................................................... 32 Loop over the data source........................................................................ 33 Execute the test case................................................................................ 35 Further exploration.................................................................................... 36 Debugging............................................................................................36 Manual............................................................................................................. 36 Go pro: Test debugging.................................................................................... 36 Multiple environments..........................................................................38 SoapUI Pro by SMARTBEAR 2 Change the target environment....................................................................... 38 Go pro: Multi-Environment Support................................................................. 39 Create a test report.......................................................................................... 44 Organize your work..............................................................................46 Workspaces..................................................................................................... 46 Version control................................................................................................. 46 Why........................................................................................................... 46 What.......................................................................................................... 47 How........................................................................................................... 47 Open source or an enterprise system?..................................................... 48 Automation...........................................................................................48 Run SoapUI test suites without SoapUI........................................................... 48 Command line.................................................................................................. 48 Maven.............................................................................................................. 49 Add a repository for SoapUI...................................................................... 50 Add and configure the SoapUI plugin....................................................... 51 Execute a test from Maven....................................................................... 52 Properties.................................................................................................. 53 A complete example.................................................................................. 53 More details.............................................................................................. 55 Automate the execution................................................................................... 55 Conclusion............................................................................................56 SoapUI Pro by SMARTBEAR 3 Introduction Why SoapUI? If you’re unfamiliar with SoapUI, we’ll begin with a short introduction to what the tool actually does. SoapUI is an API testing tool that’s both free, open source, and cross-platform. With over 1 million downloads it has become the de facto standard for functional testing of APIs, allowing you to easily and quickly create automated functional, regression, compliance, and security tests. SoapUI is also available as SoapUI Pro, which includes several timesaving features aimed at making your testing faster and your testing life easier. Functional testing While SoapUI’s functionality includes functional testing and security testing, as well as service simulation, functional testing is definitely the most popular. Functional testing means checking that the behavior of the system under consideration matches the business expectations in terms of functionality. SoapUI enables users to perform functional testing easily. This is the main functionality of SoapUI. With SoapUI, you can also perform security testing and service simulation. You would set up SoapUI to send in requests and specify assertions to verify that the response is correct. You would also specify broken requests to be able to verify that the application doesn’t blow up when it receives that strange and possibly faulty request. These tests can then be used as one-off, unit tests, regression tests, etc. Load testing should be done using LoadUI, which is integrated as a component in SoapUI. SoapUI Pro by SMARTBEAR 4 What is an API? An Application Programming Interface, API, specifies how some software components should interact with each other.1 While many people associate APIs with software libraries, the definition is broad enough to include Web Services and all types of messaging that SoapUI supports: SOAP, REST, JMS, JDBC, AMF and HTTP. What is a Web Service? The W3C defines a “Web Service” as: A Web Service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL[sic]). Other systems interact with the Web Service in a manner prescribed by its description using SOAP-messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.2 In other words, a Web Service is a service available on a network, that will allow other systems to communicate with it, using a defined protocol. The Web part indicates that the service is using transport protocols designed for the World Wide Web, i.e., it uses HTTP to communicate. Other systems can be Web applications, apps in phones and similar. APIs come in two main flavors, SOAP and REST. Generally, we have noticed that when discussing APIs and Web Services, the two terms have different connotations, though they technically define the same thing. “Web Service” is generally used when discussing SOAP-based services, while API is used in a broader sense, encompassing SOAP, REST, and the rest of the API protocols. Therefore, we simply use the abbreviation API to refer to the service henceforth. 1http://en.wikipedia.org/wiki/Application_programming_interface 2http://www.w3.org/TR/2004/NOTE-ws-gloss-20040211/#webservice SoapUI Pro by SMARTBEAR 5 SOAP A SOAP API is defined as a receiver of an XML document and is also expected to respond with an XML document. The documents should follow a format standardized by W3C. All parameters that the receiver needs to be able to respond to should be a part of the XML document sent. Testing a SOAP API means manipulating a request XML and interpreting a response XML. REST REST or RESTful APIs encode all parameters in the request. A RESTful service is never stateful. The server should not keep any state about a client. Testing a REST API means manipulating the request URI and interpreting the answer. The answer may be of many different formats. XML is possible, but formats like JSON or plain text are also possible. Testing APIs There are some initial challenges when testing an API. There is no graphical user interface, and, you must understand a response that hasn’t primarily been created to be read by humans. No graphical user interface APIs are primarily intended for computer-to-computer communication. Computers don’t have any use of a user interface designed for a human. This is a challenge if you are a tester who is accustomed to testing software designed for end-users, with a graphical interface you can click, drag-and-drop, collapse, close, and in general manipulate on the screen. A solution is to use testing tools that will assist you as much as possible to create requests and view the responses. SoapUI Pro by SMARTBEAR 6 SoapUI and SoapUI Pro are two tools that will make your life as a tester less complicated, by providing interfaces to enter your request, assertions to validate your response, various tools to create and maintain your tests, and reports to print and share with your colleagues. The tools also give you a user interface to both call APIs, and analyze answers from APIs. Hence the “UI” ending in SoapUI, meaning User Interface. Request and response SOAP-based APIs use XML as a communication protocol. It must provide an XML descriptor (WSDL), that in machine terms, clearly defines all types of request elements the SOAP API will accept, and all types of response elements it will send back. This means that you, as a tester, must be able to read, understand, create and update XML documents to be able to test a SOAP API. In REST-based services, the request is much simpler, for the most part only involving sending a URL (or URI) to the service. The responses returned are usually in the format JSON or XML. These are, again, not formatted to be consumed by human beings, i.e. you. This means testing the service may be a challenge without a good tool. Once again, SoapUI and SoapUI Pro will make your life as a tester easier. You will be able to do small changes to an XML request and get a response back from the server that you can validate. SoapUI will assist you with response validations, response format, and response times so that expected SLAs can be asserted. Exploring A common situation when SoapUI is used, is when an unknown API is explored. With the API computer-to-computer communication, the API will act as the host and you need to have another piece of code that would act as an API client. You can set up SoapUI as the API client. This is very convenient and saves a lot of time. This is common among developers SoapUI Pro by SMARTBEAR 7 who need to write a client for an unknown service. Exploring a service is probably less common among testers, as they tend to have an API that is known and should be verified. The exploring and discovering has already been done. Getting started You need to do a few things to be able to use SoapUI. This section will help you ¿¿ Set up SoapUI ¿¿ Get started with your first project ¿¿ Add a test suite ¿¿ Add a test ¿¿ Add an assertion ¿¿ Run a test suite I will use baby steps to allow for a beginner to follow. I hope it isn’t too detailed for you. Let’s begin at the beginning and install SoapUI. Installing Download SoapUI from http://www.soapui.org/. Follow the download link to get the version you want. Both SoapUI and SoapUI Pro are available at the same location. SoapUI is available for many different operating systems. Just follow the installation instructions for your operating system: ¿¿ Windows: www.soapui.org/Getting-Started/installing-onwindows.html ¿¿ Mac: www.soapui.org/Getting-Started/installing-on-mac.html SoapUI Pro by SMARTBEAR 8 ¿¿ Linux: www.soapui.org/Getting-Started/installing-on-linuxunix. html SoapUI is installed. Let’s continue with a small example project. Your first project Let’s create a project. There is an API that will take two currencies and return the currency conversion. Let’s use that for our example. It has very few moving parts, so it will be a good starting point. ¿¿ Start SoapUI. ¿¿ Create a new project, File | New soapUI Project. ¿¿ Give it a descriptive name. I choose to name it “Currency converter.” Enter the URL to a description of the service in the field “Initial WSDL/WADL”: http://www.webservicex.net/ CurrencyConvertor.asmx?WSDL ¿¿ The checkbox, “Create Requests” is checked by default. Leave the defaults and click “OK.” SoapUI will now call the API to get its details. SoapUI Pro by SMARTBEAR 9 A new project should have shown up in the Navigator section in top-left section of SoapUI. There are two versions of the service: “CurrencyConverterSoap” and “CurrencyConverterSoap12”. The difference between these is that the first one follows an older standard of SOAP compared to the latter one. Which one we use in this example doesn’t matter, so I will remove “CurrencyConverterSoap12”. Mark it and press the Delete button, or right click on “CurrencyConverterSoap12” and choose Remove. SoapUI Pro by SMARTBEAR 10 Let’s explore the remaining service. Expanding the tree to the left in the project explorer reveals four things: the project name, “Currency converter,” below it the name of the interface, “CurrencyConverterSoap,” below it, the method name, “ConversionRate,” and finally, a sample request to the service, called “Request 1.” “Request 1” is a name that SoapUI has generated for us. We want to change it to a name that is more descriptive. I chose “Euro To US Dollar.” Right click on “Request 1” and set the new name. SoapUI Pro by SMARTBEAR 11 Double click on the “Euro To US Dollar” request. A sample request will show up in the desktop. The content should look like this: <soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/ soap/envelope/” xmlns:web=”http://www.webserviceX.NET/”> <soapenv:Header/> <soapenv:Body> <web:ConversionRate> <web:FromCurrency>?</web:FromCurrency> <web:ToCurrency>?</web:ToCurrency> </web:ConversionRate> </soapenv:Body> </soapenv:Envelope> SoapUI Pro by SMARTBEAR 12 This is an XML message that will be sent to the server where the API runs. Sending it as it is will result in an error. We need to change two things before we can send it and expect something useful in return. The two question marks are placeholders for two parameters that must be set properly. The names of the parameters are “FromCurrency” and “ToCurrency.” Replace the question mark for “FromCurrency” with the symbol for Euro, EUR. Then replace the question mark for “ToCurrency” with the symbol for US Dollar, USD. The result should look like this: <soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/ soap/envelope/” xmlns:web=”http://www.webserviceX.NET/”> <soapenv:Header/> <soapenv:Body> <web:ConversionRate> <web:FromCurrency>EUR</web:FromCurrency> <web:ToCurrency>USD</web:ToCurrency> </web:ConversionRate> </soapenv:Body> </soapenv:Envelope> SoapUI Pro by SMARTBEAR 13 We should get the conversion rate between Euro and US Dollar when we send this to the server. The response will be a similar XML document, where we will locate an element that contains the answer. It will look like this: <soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/ envelope/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=”http://www.w3.org/2001/XMLSchema”> <soap:Body> <ConversionRateResponse xmlns=”http://www.webserviceX.NET/”> <ConversionRateResult>1.318</ConversionRateResult> </ConversionRateResponse> </soap:Body> </soap:Envelope> The element “ConversionRateResult” contains the value 1.318, which should be interpreted to mean that it will cost you 1.318 US Dollars to get one Euro. I will add an assertion later that will verify this value. Adding an assertion in this case may be a bit risky, as the exchange rate between Euro and US Dollar isn’t fixed. But let’s ignore that problem for now. Add a test suite The sample request we made earlier should be included in a test suite that contains one or more test scenarios. Each scenario should also contain one or more assertions. We will execute this test suite to do a functional test of an API. SoapUI Pro by SMARTBEAR 14 Let’s add the test suite. ¿¿ Right click on “CurrencyConverterSoap.” ¿¿ Click on “Generate TestSuite.” ¿¿ A dialog box will show up where you can customize the generation. Leave the defaults as they are and click “OK” to generate a test suite. Call the test suite “Euro to Dollar TestSuite” and click “OK.” A test suite is generated for us. It has been populated with one test case. Let’s move on and have the test case do something useful. Add a test Expand the newly created test suite. A test case has been created for us. Our next step is to tweak it so we can verify the conversion rate. ¿¿ Expand the tree until the test steps have been unfolded and the test step “ConversionRate” is visible. ¿¿ Double click on the test step. A sample request should appear in the request editor. SoapUI Pro by SMARTBEAR 15 Replace the two question marks in the XML with EUR and USD. The result should look like this: <soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/ soap/envelope/” xmlns:web=”http://www.WebserviceX.NET/”> <soapenv:Header/> <soapenv:Body> <web:ConversionRate> <web:FromCurrency>EUR</web:FromCurrency> <web:ToCurrency>USD</web:ToCurrency> </web:ConversionRate> </soapenv:Body> </soapenv:Envelope> ¿¿ The “web:FromCurrency” tag should contain EUR and the “web:ToCurrency” should contain USD. SoapUI Pro by SMARTBEAR 16 This is all we need to do to create our first test case. We can execute this test case now. The result after an execution will look similar to this: Unfortunately, we will not get any indication if it failed or passed if we execute it now. We need to add at least one assertion that will warn us if there was a problem that failed this test. Let’s do this as the next step. SoapUI Pro by SMARTBEAR 17 Add an assertion Add our first assertion. ¿¿ Click on the label “Assertions” at the bottom of the request editor. ¿¿ This will expand the assertions editor. It is empty. Click on the small +-sign at the top of the assertions editor. Select “Property Content assertions.” The first one in the list is a Contains assertion. Let’s use that one. Click on the “Contains” box and then click on “Add” to add it to the test case. SoapUI Pro by SMARTBEAR 18 Add 1.318 in the next dialog box. Click “OK” to add it. We have one assertion to start with. We will probably want to add more assertions later, but let’s start small and just have one. We will add more moving parts when this first case has been verified. Hardcoding the conversion rate between two currencies like this is brittle. We will have to do something about that later, also. SoapUI Pro by SMARTBEAR 19 Run the test The first thing we want to do is to run a single test case. ¿¿ Click on the small, green arrow at the top left corner of the request editor. ¿¿ This will send the request to the server. The assertion will be green if the value 1.318 is available in the response. Next step is to run the entire test suite. It doesn’t contain more than a single test at the moment. The result should be exactly the same as running a single test. Run the test suite Executing the entire test suite can be done like this: ¿¿ Double click on the test suite “Euro to Dollar TestSuite.” ¿¿ Click on the small, green arrow at the top of the test suite editor. All test steps will be executed and they should be green. There is only one in this case, but one is enough to verify the execution. SoapUI Pro by SMARTBEAR 20 Further exploration Now that you have created a test suite, it is time to add more test steps to it or add more assertions to the step we just created. The basic infrastructure is in place. Now it is just more of the same. Create tests Creating tests is mostly about adding proper assertions to a test case. We have our test step that will verify the conversion rate between Euro and US Dollar. The verification we added earlier is brittle. The conversion rate between two currencies is seldom fixed. Other verifications we can add are verifying if a response is received fast enough and thus answer the question if the service we are testing is following a given service level agreement, SLA. SoapUI Pro by SMARTBEAR 21 Let’s add verifications to our test case and discover more about how to verify the response. Verify a range It is easy to verify that an answer contains a value. This may be great if you want to verify a value that is not expected to change. Some values change. We have to create a test that can handle a range instead of a fixed value. Suppose that we can assume that the response will contain a value that is greater than something else. With this, we can verify a range. Let’s assume that the conversion rate between Euro and US Dollar is larger than 1 and lower than 2. How could that be expressed? We need to start with locating the element that contains the value. When this is done, we need to compare the value with our assumption. ¿¿ Click on the label “Assertions” at the bottom of the request editor. ¿¿ Click on the small +-sign at the top of the assertions editor. ¿¿ Select “Property Content.” SoapUI Pro by SMARTBEAR 22 ¿¿ Select “XPath match” and click “Add.” ¿¿ Click “Declare” in the XPath editor, SoapUI declared two name spaces for you. They can be called anything. The two name spaces that were declared are called soap and ns1. ¿¿ Rename ns1 to something more descriptive. I choose Web since it is the same name space that is used in the request. Web is perhaps not much more descriptive than ns1, but at least it is not an abbreviation for Name Space 1. ¿¿ The next step is to add an XPath3 expression that will search for the element that contains the conversion rate. //Web:ConversionRateResult 3http://www.w3schools.com/xpath/ SoapUI Pro by SMARTBEAR 23 ¿¿ Verify that the syntax is correct by pressing the “Select from current” button. You should get the value available in the response. I got 1.318 when I tried. ¿¿ When we are able to locate the element, let’s continue with verifying that it is larger than one. Rewrite the XPath expression like this: //Web:ConversionRateResult > 1 SoapUI Pro by SMARTBEAR 24 ¿¿ Verify the result again by pressing “Select from current.” I got the result true. ¿¿ Press the Test button to execute the test. I got a dialog box that told me that the test was a success. ¿¿ Save the current verification by pressing “Save.” To verify that the conversion rate is lower than 2, create a similar assertion and change the XPath to //Web:ConversionRateResult < 2 An easy way to do this is to clone the XPath assertion. Right click on it, select “Clone” and do the appropriate changes. SoapUI Pro by SMARTBEAR 25 Verify response time Verifying the response time is often important. A slow API is a problem waiting to emerge. Customers will probably start to complain when you have a lot of traffic and they don’t get their response quickly enough. Let’s prepare for this by requiring the service to respond within 1 second. ¿¿ Add a new assertion. ¿¿ Select “SLA” and “Response SLA.” ¿¿ Add it. ¿¿ Specify the desired response time. The default value is 200 as in 200 ms. We want to allow one second, so set the new value to 1000 ms and press “OK.” Adding a minimum response time like this is easy. A more difficult problem may be to actually deliver such short response times. But that is not our current focus; we are just verifying that the service is fast enough. Verify schema compliance APIs should follow their own schema definition. We used the schema definition when we created the request to the service. We need to add verification if we want to be sure that the response follows the schema it should be following. ¿¿ Add a new assertion ¿¿ Select “Compliance, Status and Standards” ¿¿ Select “Schema Compliance” ¿¿ Add it ¿¿ Define the schema, the response should follow. The suggested schema is the same schema as we used to create the service. This is the schema we want to use in this example. ¿¿ Click “OK.” SoapUI Pro by SMARTBEAR 26 All requests now have to follow its schema definition. If they don’t, the test will fail. This is great if we want to catch a bug introduced to the service. Many more tests can obviously be added, but the ones I have added here should get you started. Go pro: Point and click testing SoapUI Pro has been extended to support pointing and clicking when you create tests or add assertions. This is a real time saver and is something you will really appreciate when you are working under time constraints. Creating an XPath assertion can be tricky when you need to get the correct data. It is very easy to do using SoapUI Pro where you can click on the data element in the response and get a proper XPath for it. SoapUI Pro also makes moving data from a response to the next request easy by assisting with the XPath expression you want to use to retrieve the correct data. Verify a range Let’s revisit verifying that the response is within a certain range. We did that by writing an XPath validation manually. SoapUI Pro has implemented a wizard that will remove a lot of the details you have to remember and allow you to focus on the actual problem: verifying that the conversion rate between Euro and US Dollar is larger than one. ¿¿ Add a new assertion. ¿¿ Select “Property Content.” ¿¿ Select “XPath Match.” ¿¿ Add it. ¿¿ Click on the small node selector to the left of the “Declare” button. SoapUI Pro by SMARTBEAR 27 Select the node you are interested in verifying. An XPath expression will be created for you and will locate that specific element. This is a read only field. ¿¿ Click “OK.” ¿¿ Change the XPath created for you from //ns1:ConversionRateResponse[1]/ ns1:ConversionRateResult[1] to //ns1:ConversionRateResponse[1]/ ns1:ConversionRateResult > 1 SoapUI Pro by SMARTBEAR 28 ¿¿ Click “Select from current” and notice that the “Expected Result” area gets set to true. ¿¿ Run the test by clicking the “Test” button. It should be a success. ¿¿ Save the test. We just added the same verification, but we didn’t have to understand or know how to write the XPath to locate the value we wanted to verify. Spending less time writing XPath expressions and more time focusing on what really needs to be tested is a good reason for going pro. Data driven testing Verifying an API using different test data is common. A service should perhaps be able to translate between many different currencies. Verifying each combination by hand can very quickly be too much to cope with. SoapUI doesn’t have any built in support for reading test data from a source and using it as a parameter to a test. It is possible to implement using a Groovy script that reads from the data source and passes parameters to a test case. This is, unfortunately, out of scope for an introduction to SoapUI, so it will not be covered here. SoapUI Pro by SMARTBEAR 29 Another solution is to use SoapUI Pro that has support for reading from a data source and passing the result to a test case out of the box. Go pro: Data source out of the box Setting up a test to use a data source is available out of the box for SoapUI Pro. The setup is done in the following steps: ¿¿ Create a data source. ¿¿ Create a test that uses values from the data source. ¿¿ Add a loop to iterate over the values found in the data source. Let’s add a data source to our example. Create a data source The data source is created as a test step. We need some kind of data before we can make any use of it. SoapUI Pro supports these types of data sources: ¿¿ Data connection – connect to a data source and use SQL to extract your test data ¿¿ Directory – read a set of files from a directory and use their content as test data ¿¿ Excel – read an Excel sheet and use its content as test data ¿¿ File – read a separated file and use as test data ¿¿ Grid – define a grid in SoapUI Pro that will hold all test data ¿¿ Groovy – create a Groovy script that generates the test data ¿¿ JDBC – connect a data source and use SQL to extract the test data. This one is very similar to the Data connection above ¿¿ XML – read test data using XPath expressions I want to keep it simple, yet useful, so I will use a comma-separated text file where each row will be test data for one test. SoapUI Pro by SMARTBEAR 30 Create a text file with this content: EUR, USD EUR, GBP SEK, PLN I saved it as test-data.txt. This will be our first data source. Our goal is to iterate through it and verify that we get conversion rates for the three different cases. The next step is to connect to it. ¿¿ Add a new test step to the test steps, select the type “DataSource.” ¿¿ Specify a name for it, I used ConversionsDataSource. ¿¿ Define the type of Data source in the drop down DataSource. Select “File.” SoapUI Pro by SMARTBEAR 31 ¿¿ Browse to the file you just created and select it. ¿¿ The default setting is that the file will be comma-separated, leave that as it is. ¿¿ The default value for “Charset” is also ok. ¿¿ The checkbox Trim values is set and that is also something we want to keep. The values we read from the file should be stripped of whitespace, EUR should be read without the spaces surrounding it. ¿¿ Our values are not quoted, so leave that checkbox unset. ¿¿ Name the two columns in the data source. Click on the +-sign in “Properties” editor to the left. ¿¿ Call the first property “FromCurrency” to indicate that the first column in our test data file will be the currency we want to get the conversion from. ¿¿ Call the next column “ToCurrency” to indicate that the second column in the test data file is the currency we want to get the conversion to. SoapUI Pro by SMARTBEAR 32 This is all we want to set for our data source. Next step is to use it in a test case. Create a test with parameters The test step is similar to the one we have created before. The only actual difference will be that instead of defining the currencies, we will use variables. These variables will be set with values from the data source and we will get many different tests. This is how to do it: ¿¿ Add a new test step to test steps, select the type “Test Request” and call it “Conversion Test Request.” ¿¿ Select the operation to invoke for this request. There is only one available. ¿¿ Define some settings in the next dialog box. ¿¿ “Add SOAP Response Assertion” is selected, leave it selected. It will verify that we actually receive a SOAP response. ¿¿ I leave the rest of the suggested assertions unchecked and Click “OK.” ¿¿ Connect the parameters. ¿¿ Right click on the drop-down “FromCurrency.” ¿¿ Select “Get Data.” ¿¿ Navigate to the step “ConversionDataSource.” ¿¿ Select “Property [FromCurrency].” ¿¿ Do the same for “ToCurrency.” Right click -> Get Data -> ConversionDataSource -> Property [ToCurrency]. That was all we had to do to connect the data source with the test case. Next step is to iterate, or loop if you want, over the data source, so we can execute the test case for each row that is found in the data source. SoapUI Pro by SMARTBEAR 33 Loop over the data source Iterating over the data source is done using a DataSource Loop. ¿¿ Add a new test step to test steps, select the type “DataSource Loop” and call it “Conversion DataSource Loop.” ¿¿ Double click on the new test step to bring up the editor where we can define which step to use as the data source for this loop, and define which step will be executed. ¿¿ Select “ConversionDataSource” as Datasource Step. ¿¿ Select “Conversion Test Request” as Target Step. ¿¿ Click “OK.” The data source and the test request have been connected. The next step is to execute a test run and verify that we send three different requests and get valid answers back. SoapUI Pro by SMARTBEAR 34 Execute the test case We have prepared a test case. Let’s execute it and see if we get something interesting. ¿¿ Double click on the “ConversionRate TestCase” to bring up the TestCase overview. ¿¿ The test steps should be listed for execution. ¿¿ Click on the small green arrow in the left, upper corner, to execute the steps. SoapUI Pro by SMARTBEAR 35 Eight steps were executed. The first was our previous test step, the second read the data source, the next executed the test request, and the fourth read the next value from the data source. The last two steps where repeated until all rows in the data source were read. Try adding one more row in the file test-data.txt and execute the test case again. I added USD, EUR. Adding one row resulted in one more test case that was executed. Verifying more combinations is just a matter of adding them to the data source file. Further exploration A simple file was used as a data source in this case. It is common to have other data sources. Many of them can be connected out of the box with SoapUI Pro. Debugging Writing a test perfectly the first time is difficult. Debugging and testing are common activities that you usually will spend some time doing until the test you are creating is perfect, or at least good enough. SoapUI Pro by SMARTBEAR 36 Manual Problem: You have a test suite with some steps, and you are not sure that the steps are correct. Solution: Disable all steps, except the first step. Rerun the suite and verify the outcome. When the first step delivers the expected result, enable the next step. Adding one step at a time, in a controlled way, is a great way to build up confidence for the suite. A general problem-solving technique to debug anything is half-interval search4. You remove half of the steps and check to see if the problem you are trying to locate is present. If it isn’t, then you know that your problem is in the other half. Dividing the steps into smaller and smaller parts will eventually, often quite soon, tell you exactly where the problem is. Go pro: Test debugging Easily follow your test flows step by step, and improve the quality of your tests with Test Debugging. There are times when you want to examine the behavior of your tests in detail – this is called debugging. If you suspect errors in your tests or the services you’re testing, Test Debugging will help you diagnose it. With the debugging support, you can execute your TestSteps step by step. Alternatively you can add breakpoints and then run the test to those set breakpoints and view the current value of the SoapUI properties. The Test Debugging Interface simplifies following Test Flow, Variables, Properties, Requests, Context, and much more, making test creation and improvement more streamlined. 4http://en.wikipedia.org/wiki/Binary_search_algorithm SoapUI Pro by SMARTBEAR 37 Let’s walk through a small debugging session to show how it can be done using SoapUI Pro. ¿¿ Double click on the “ConversionRate TestCase” in the Navigator. ¿¿ Select “TestCase Debugging” in the test case editor to the right. ¿¿ The steps are now listed and can be executed by clicking on the small, green arrow above the test step list. Doing so now will execute them in a sequence. You must add breakpoints to be able to step through them. ¿¿ Add breakpoints. Click just to the left, in the column named BP, of each test step. That will toggle a breakpoint on or off. Set breakpoints on all steps. ¿¿ Run the tests and notice that the execution stops at each breakpoint. ¿¿ The current step is indicated with a small, green arrow, just to the right of the step name. ¿¿ Click on the solid green arrow to run one step at a time. SoapUI Pro by SMARTBEAR 38 Debugging a simple case like this may not be very interesting, but it prepares you for more complicated cases. Debugging test is only available in SoapUI Pro and is a good reason for going pro. Multiple environments The test you have created should be possible to use for a system test environment as well as an acceptance test environment. The only thing you should change is the address, also known as the endpoint, to the server where the system is hosted. Change the target environment The environment you test against is defined in the service endpoints. Change it like this: ¿¿ Double click on the Service definition, “CurrencyConverterSoap.” ¿¿ Select the “Service Endpoints” tab. ¿¿ Click on the endpoint you want to change in the list and change the address. http://www.webservicex.net/CurrencyConvertor.asmx to http://acc-www. webservicex.net/CurrencyConvertor.asmx if you want to test the same service on the host acc-www. ¿¿ Press enter when you are done with your change. ¿¿ Execute the test step. My execution failed, there is no host called acc-www.webservicex.net It is possible to use properties to define the endpoint, and this could be another way of setting the service endpoints in such way that they are fast to change. More information about this is available on soapui.org5 5http://www.soapui.org/Functional-Testing/structuring-and-running-tests.html SoapUI Pro by SMARTBEAR 39 Go Pro: Multi-Environment Support If you’re testing different environments, such as Staging and Production, this feature will be a major time-saver. Manually changing all the different connections and end-points of your tests when you need to switch environment is cumbersome. With SoapUI Pro you can choose which environment you want to apply through a simple drop-down menu. SoapUI Pro then automatically changes the necessary parts of your tests to enable it to run in the new environment. All that’s needed is a one-time setup of your different environments, and you are good to go. Let’s walk through an example on how you can set up different environments so you can switch between them quickly. ¿¿ Double click on the project. ¿¿ Select the “Environments” tab to the far right. ¿¿ Click on the small +-sign to add a new environment. ¿¿ Name it “Acceptance.” ¿¿ Keep the default values and do not copy from the test case. We will add a good endpoint manual in a short while. ¿¿ Click “OK.” SoapUI Pro by SMARTBEAR 40 ¿¿ All requests and their endpoints are listed in the dialog box below the Environment name. ¿¿ Double click on “CurrencyConverterSoap.” ¿¿ Add a good endpoint for it. I use: http://acc-www.webservicex.net/CurrencyConvertor.asmx ¿¿ Test it by executing the test case and selecting “Acceptance” as environment. ¿¿ It failed, there is no host called http://acc-www.webservicex.net. ¿¿ Create another environment by following these steps again, call it “Production” and use the endpoint. http://www.webservicex.net/CurrencyConvertor.asmx It should work when you execute the test and use the environment “Production.” SoapUI Pro by SMARTBEAR 41 When you change the environment you test, a database holding the current data set for the environment will often have to be changed. This can be done at the same time. Let’s extend the example a little bit by adding support for different databases at the same time as you change environment. We don’t have a database connection in our example, so let’s add one. ¿¿ Double click on the project. ¿¿ Select the tab “JDBC Connections.” ¿¿ Add a new data connection by clicking on the small +-sign in the left corner. ¿¿ Specify a name for the data connection. I use “Customer” to indicate that this is our customer data connection. ¿¿ Click “OK”. ¿¿ Select the correct database and connection details. I set up a MySql connection. We just created a data connection. Now let’s make sure that we connect to different databases when we change environment. SoapUI Pro by SMARTBEAR 42 Open up the “Environments” tab again. We have an environment called “Acceptance,” let’s add another one called “Stage.” Click on the small +-sign above the environment list and call it “Stage.” Keep the setup defaults empty and click “OK.” Click on “Acceptance” and notice that we have an endpoint set. Click on “Stage” and notice that we haven’t an endpoint set. Set it to something appropriate. Click on the “JDBC Connections” tab and check the value set for “Acceptance” and then the value set for “Stage.” Acceptance has the same connection details as we specified earlier. Stage doesn’t have any Connection string defined yet. Double click on the “Customer JDBC” connection for Stage and set up the connection string. The result will be that when we test against Acceptance, we will use the endpoint defined for SOAP Services and the data connection defined in JDBC Connections for Acceptance. When we change environment to SoapUI Pro by SMARTBEAR 43 Stage, both of these settings will be changed. This allows us to change between different environments very quickly. Using different environments could be a good reason to go pro. Reporting Reporting the status of your test runs is important. A test report is often required before you are allowed to deploy a product into production. There is no built-in support in SoapUI to generate reports from a test execution. This is only available in SoapUI Pro. Create a test report A test report is created based on a test suite execution. This means that we must start by running a test suite before a report can be generated. ¿¿ Execute the test suite Euro To Dollar TestSuite. ¿¿ Click on the “report” button in the toolbar to generate a report. It is the icon just to the left of the environments drop-down. ¿¿ Select a format. I select TestSuite Report. ¿¿ Click “OK.” ¿¿ A preview of the report shows up. ¿¿ Save it by clicking on the floppy icon to the far left. SoapUI Pro by SMARTBEAR 44 ¿¿ A “save” dialog box shows up where you can define the name for the report as well as the format. I choose RTF, Rich Text Format, because I want to be able to edit it later, using Microsoft Word. SoapUI Pro has an extensive set of prepared reports that supports these formats: ¿¿ PDF – Portable Document Format ¿¿ RTF – Rich Text Format ¿¿ ODT – Open Office ¿¿ HTML ¿¿ Single sheet XLS – Excel ¿¿ Multiple sheets XLS – Excel ¿¿ CSV – Comma-separated file for import to Excel ¿¿ XML You can change the content of the reports, but that is out of scope for this SoapUI introduction. Organize your work How you organize your work is obviously not something that should be dictated by a tool. At the same time, the tool you are using may support working in different ways. SoapUI will force you to organize your work using workspaces. It will give you a choice on how you want to save your project so it can be shared with other testers. Let’s start with workspaces and then discuss version control and sharing. SoapUI Pro by SMARTBEAR 45 Workspaces SoapUI uses workspaces6 where you do all your work. A workspace contains all your current projects. This means that you can work on more than one project in the same SoapUI session. When you want to change to another project either add it to the current workspace or switch to another workspace. Workspaces can be shared in the team. I am not sure that sharing the workspaces are the best idea though. Sharing workspaces will force everyone to work with the same set of projects all the time. This may not suit how you do the work. Version control Storing your projects in a version control system is considered the best practice. It will enable you to go back to a known version. It will make it easier to share files with other testers. Why A shared resource on a file system is a fragile way to share your work. People can overwrite files that another person is working on and changes can easily get lost. File history is hard to keep track of. Tracking who made which changes to the project is not possible. Therefore, sharing files through a version control system is often used in development projects. The tests you have created with SoapUI have a significant value and should be protected as much as possible. Storing them in a version control system is therefore something you’ll want to do. What What should be stored then? Your workspace may or may not be interesting for other testers. The workspace reflects how you personally 6http://www.soapui.org/Working-with-soapUI/managing-workspaces.html SoapUI Pro by SMARTBEAR 46 group different projects. Sharing them with the other testers is something you need to discuss and then decide upon. You should store your project files. They are the most important outcome from your testing work. They should be used and maintained for all testers in your team. SoapUI Pro support saves the project as a composite. This means that each part of the project will be saved in separate files instead of saving the entire project in the same file. This doesn’t have any impact on anything more than the possibility to cooperate and allow more then one person to work on the same project. But cooperating and sharing is the key to scalability. One person can only do so much; two persons can do a lot more. Combining composite projects and storing them in a version control system allows the testing effort to scale and more tests can be created and maintained, compared to not using composite projects. How There are many different version control systems. Some of them are large enterprise solutions, others are open source and freely available. They all solve the same business problem by providing a single repository for your files and versioning the changes. Open source or an enterprise system? This is a question that depends a lot on the organization you work with. Some organizations want to buy tools, others support open source tools and just buy the support they need when they need it. Open source solutions are used to store some very high profile systems. The Linux kernel, for example, is stored using an open source version control system called Git. SoapUI is also version-controlled using Git. SoapUI Pro by SMARTBEAR 47 Automation Automated testing is an area where many companies put in a lot of effort. They want to eliminate the mundane, expensive and manual testing that used to be the only way you could verify a system. They also want the developers to get fast feedback as soon as they have done a change to a system. How can SoapUI be used for test automation? The trick is to execute test suites developed using SoapUI, without using the user interface of SoapUI, and instead trigger it from some kind of automation build tool. There are many different tools that could trigger the execution. Most of them have in common that they are good at triggering anything from a command line prompt. This could be a bat script in Windows, a shell script in Unix, or it could be Maven project in a Java build environment. Run SoapUI test suites without SoapUI The first example will show how SoapUI can be executed from a command line. The second example will show how Maven can be used to run SoapUI. Command line Command line tools are good if you want to be able to execute something from a script that you have created yourself. SoapUI has support for executing from a command line. Execute it like this: testrunner project_file where project_file is a SoapUI project file that could look like this c:\ projects\my-soapui-project.xml if you are on Windows. The command line tool takes a lot of parameters that will allow you to control the execution. They are described at the SoapUI Web site.7 7http://www.soapui.org/Test-Automation/functional-tests.html SoapUI Pro by SMARTBEAR 48 It turns out that it is actually the command line tool that is used when a test is executed from the TestRunner. If you want help with running the exact same execution from a command line that you executed from the TestRunner, then try this: ¿¿ Execute the test you want from the test runner. ¿¿ Scroll back in the execution log until you find the launch of the test runner in the beginning of the log. ¿¿ Copy the command and use it in your own script or from a command line. Maven Maven is a popular build tool for building Java. Running a SoapUI test from Maven is similar to running it from a command line. The difference is that you need to set up a Maven project and then use Maven. This is a good alternative if Maven is already building the rest of the project. Many Java projects are using Maven. Let’s set up a Maven project that will run SoapUI. Maven is very good at handling dependencies. There are repositories on the Internet where dependencies that could be used in a Maven project are stored. When Maven realizes that it doesn’t have a local copy, it will download the resources it misses. This is a feature we can use when retrieving the SoapUI plugin. Maven uses a file called pom.xml for all settings. We need to extend an existing pom file for your project or create a new one. Going through all the details for a Maven project is out of scope here. I will just focus on the parts that are SoapUI specific and leave the rest of the details to be explained by other resources8 9 on the Internet. 8http://maven.apache.org/ 9http://thomassundberg.wordpress.com/2013/02/24/maven-the-simplest-possible-introduction/ SoapUI Pro by SMARTBEAR 49 The SoapUI specific things that must be added to a pom are ¿¿ Specify a repository where the SoapUI plugin can be found ¿¿ Add and configure a plugin that will execute the test Add a repository for SoapUI The SoapUI plugin for Maven must be found and downloaded. It lives in a repository that must be specified specifically. Add this to your pom: <pluginRepositories> <pluginRepository> <id>eviwarePluginRepository</id> <url>http://www.soapui.org/repository/maven2/</url> </pluginRepository> </pluginRepositories> The value of the id tag could be set to almost anything, as long as it is unique. A descriptive name is, as always, preferable. Now that we can locate the SoapUI plugin, let’s continue with adding and configuring it. Add and configure the SoapUI plugin Add the following snippet to the build section of your pom: <plugins> <plugin> <groupId>eviware</groupId> <artifactId>maven-soapui-plugin</artifactId> <version>4.5.1</version> <configuration> SoapUI Pro by SMARTBEAR 50 <projectFile>simple-test-soapui-project.xml</ projectFile> </configuration> </plugin> </plugins> This will specify that we want to use a plugin called maven-soapui-plugin and that we want to use version 4.5.1 of the plugin. The project we want to execute is specified in the configuration section and it is called simple-test-soapui-project.xml. You can specify more things, but this is a small start with just a few moving parts. The next step would be to execute a test. Execute a test from Maven Maven is a command line tool that is executed with the command mvn You want to specify at least one goal that Maven should execute. The simplest possible could be mvn validate It will validate that the format of your pom is correct. SoapUI Pro by SMARTBEAR 51 To actually execute the test we specified above, run this instead: mvn eviware:maven-soapui-plugin:test We specify that we want to execute the SoapUI plugin and the goal test. The plugin has other goals that you could use. Executing load test is one of them. These were just a few snippets. Let’s put them in context in a complete example. Properties You can define properties in your test. You need to add a section called projectProperties in the configuration section. Then add the values you want as name value pairs. <configuration> <projectFile>simple-test-soapui-project.xml</projectFile> <projectProperties> <value>message=Hello World!</value> </projectProperties> </configuration> There should not be any space after the equals sign. It would place a space in front of your value. That could be a subtle bug that you would like to avoid. SoapUI Pro by SMARTBEAR 52 A complete example A small example can look like this: <?xml version=”1.0” encoding=”UTF-8”?> <project> <modelVersion>4.0.0</modelVersion> <groupId>com.smartbear</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-pro-plugin</artifactId> <version>4.5.1</version> <configuration> <projectFile>simple-test-soapui-project. xml</projectFile> </configuration> </plugin> </plugins> </build> </project> SoapUI Pro by SMARTBEAR 53 I have defined the necessary plugin repository and configured the soapui plugin. I used the pro version here. If you would like to do the same thing for SoapUI, then use the plugin called maven-soapui-plugin. To execute this example, run Maven like this: mvn eviware:maven-soapui-pro-plugin:test from a command line prompt. You can define properties that will be set from the pom and you can run the tests as an integrated part of the Maven build. That is more of a Maven discussion than a SoapUI discussion, so I will leave that out to minimize the number of moving parts. More details The Maven plugin can be used to do more than what I described here. The details can be found at the SoapUIWeb site. 10 Automate the execution After creating your SoapUI functional tests with test suites and connecting SoapUI tests to your build tool, it is time to execute them, as soon as a change has occurred. There are many different build tools available. One popular tool is Jenkins.11. Jenkins will be able to listen for a change on a url and kick off a test job. This would make it possible for you to start testing as soon as there is something new to test. All build servers handle Maven projects out of the box, so setting up a build that executes SoapUI tests is just a matter of setting up a Maven build. Describing that is, however, out of scope here. 10http://www.soapui.org/Test-Automation/maven-2x.html 11http://jenkins-ci.org/ SoapUI Pro by SMARTBEAR 54 Conclusion You should now be able to verify and test APIs using a tool like SoapUI. Your chances of securing the delivery of high quality APIs will be drastically improved, compared to when testing the services using your own, homegrown API clients. You will save a lot of time and be able to focus on the real problem, testing, instead of the problem of creating your test tool. Using SoapUI Pro will give you additional benefits. You will be able to save even more time, and therefore money, by using the built-in features of SoapUI Pro that are specifically targeted on speeding up common tasks. Reporting, Data driven testing and simplified test creation are just three examples. SoapUI Pro by SMARTBEAR 55 Haven’t gone PRO yet? Try functional testing in SoapUI Pro today! About SmartBear Software More than one million developers, testers and operations professionals use SmartBear tools to ensure the quality and performance of their APIs, desktop, mobile, Web and cloud-based applications. SmartBear products are easy to use and deploy, are affordable and available for trial at the website. Learn more about the company’s award-winning tools or join the active user community at http://www.smartbear.com, on Facebook or follow us on Twitter @smartbear and Google+. SmartBear Software, Inc. 100 Cummings Center, Suite 234N Beverly, MA 01915 +1 978.236.7900 www.smartbear.com ©2013 by SmartBear Software, Inc. Specifications subject to cha SB-SUI-20130925-V1-SoapUI101