Groovy Script in SOAPUI allow for reaching out to external data and return reporting elements and data
- Open Flie/DB connection
- Read from Excel/Database
- Re-Name Test Steps from Excel Columns
- Get Values from spreadsheet/database for test step(s) values
- Use variables/properties for
- logging
- Renaming Test Cases on-the-fly
- Populating Request Messages
- Populating Response Messages
- Resetting Test Case to default values
- Closing Flies/DB connections
Script Logging
log.info( "NEXT: : " + curTC.getPropertyValue("Symbol") )
log.info( "Test Case TearDown.." )
TestSuite
SetupScript
log.info(runner.getTestSuite().toString()) log.info(runner.toString())
TestCase
Test Case Properties
Test Properties are VARIABLES used in a test case. Access them by #TestCase#VARIABLE
- ElName - Uranium
- AtNum - 92
- Symbol - U
- AtWeight - 238.03
- BoiPoint - 4091
Setup Script
import org.apache.poi.hssf.usermodel.*;
//Create data formatter
dFormatter = new HSSFDataFormatter()
//Create a new workbook using POI API
srcBook = new HSSFWorkbook(new FileInputStream(new File("C:\\PerTableData\\TestData-Mix.xls")))
//Create formula evaluator to handle formula cells
fEval = new HSSFFormulaEvaluator(srcBook)
//Get first sheet of the workbook (assumes data is on first sheet)
sourceSheet = srcBook.getSheetAt(0)
//Sets row counter to 0 (first row)-- if your sheet has headers, you can set this to 1
context.rowCounter = 0
//Read in the contents of the first row
sourceRow = sourceSheet.getRow(0)
//Step through cells in the row and populate property values-- note the extra work for numbers
elNameCell = sourceRow.getCell(0)
testCase.setPropertyValue("ElName",dFormatter.formatCellValue(elNameCell,fEval))
atNumCell = sourceRow.getCell(1)
testCase.setPropertyValue("AtNum",dFormatter.formatCellValue(atNumCell,fEval))
symbolCell = sourceRow.getCell(2)
testCase.setPropertyValue("Symbol",dFormatter.formatCellValue(symbolCell,fEval))
atWtCell = sourceRow.getCell(3)
testCase.setPropertyValue("AtWeight",dFormatter.formatCellValue(atWtCell,fEval))
boilCell = sourceRow.getCell(4)
testCase.setPropertyValue("BoilPoint",dFormatter.formatCellValue(boilCell,fEval))
//Rename request test steps for readability in the log; append the element name to the test step names
testCase.getTestStepAt(0).setName("GetAtomicNumber-" + testCase.getPropertyValue("AtNum"))
testCase.getTestStepAt(1).setName("GetAtomicWeight-" + testCase.getPropertyValue("AtWeight"))
testCase.getTestStepAt(2).setName("GetElementySymbol-" + testCase.getPropertyValue("Symbol"))
//Add references to sheet to re-use it in ReadNextLine step
context.srcWkSheet = sourceSheet
TearDown Script
//Cleanup: rename test steps to their generic names and close the file reader
testCase.getTestStepAt(0).setName("GetAtomicNumber")
testCase.getTestStepAt(1).setName("GetAtomicWeight")
testCase.getTestStepAt(2).setName("GetElementSymbol")
Test Step Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET">
<soapenv:Header/>
<soapenv:Body>
<web:GetAtomicNumber>
<!--Optional:-->
<web:ElementName>${#TestCase#ElName}</web:ElementName>
</web:GetAtomicNumber>
</soapenv:Body>
</soapenv:Envelope>
Test Step Groovy: Read Next Line
Groovy Script
import org.apache.poi.hssf.usermodel.*;
cellDataFormatter = new HSSFDataFormatter()
//Create formula evaluator
fEval = new HSSFFormulaEvaluator(context.srcWkSheet.getWorkbook())
//Increment the rowcounter then read in the next row of items
context.rowCounter++;
if(context.rowCounter<=context.srcWkSheet.getLastRowNum()){//Check if we've reached the last row
curTC = testRunner.testCase
sourceRow = context.srcWkSheet.getRow(context.rowCounter)//Get a spreadsheet row
//Step through cells in the row and populate property data
elNameCell = sourceRow.getCell(0)
curTC.setPropertyValue("ElName",cellDataFormatter.formatCellValue(elNameCell,fEval))
atNumCell = sourceRow.getCell(1)
curTC.setPropertyValue("AtNum",cellDataFormatter.formatCellValue(atNumCell,fEval))
symbolCell = sourceRow.getCell(2)
curTC.setPropertyValue("Symbol",cellDataFormatter.formatCellValue(symbolCell,fEval))
atWtCell = sourceRow.getCell(3)
curTC.setPropertyValue("AtWeight",cellDataFormatter.formatCellValue(atWtCell,fEval))
boilCell = sourceRow.getCell(4)
curTC.setPropertyValue("BoilPoint",cellDataFormatter.formatCellValue(boilCell,fEval))
//Rename test cases for readability in the TestSuite log
curTC.getTestStepAt(0).setName("GetAtomicNumber-" + curTC.getPropertyValue("AtNum"))
curTC.getTestStepAt(1).setName("GetAtomicWeight-" + curTC.getPropertyValue("AtWeight"))
curTC.getTestStepAt(2).setName("GetElementSymbol-" + curTC.getPropertyValue("Symbol"))
//Go back to first test request with newly copied properties
testRunner.gotoStep(0)
}
- Log in to post comments
