JoostDG
8 years agoFrequent Contributor
Script Assertion to report on performance of a GET request to file
Hi,
I'd like to share a piece of groovy script I created.
Use case: Every time we run a GET request test step we want to keep track of the response timings and log them to a file.
import com.eviware.soapui.support.JsonUtil
String environment = messageExchange.getRequestHeaders()"Host"
String response = messageExchange.getResponseHeaders()"#status#"
TimeZone.setDefault(TimeZone.getTimeZone('CET'))
def timestamp = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())
if (response == "[HTTP/1.1 200 OK]")
{
def x = messageExchange.response.getContentAsString()
def y = JsonUtil.parseTrimmedText(x)
// define the log file path (tip: use projectpath dynamically) and seperate log files depending on the environment
def projectpath = context.expand( '${#Project#projectpath}' )
def LogFilePath = projectpath + "/logs/"
def fileName
if (environment.contains("test"))
{fileName = LogFilePath+ 'TEST - Get Notifications.txt'}
else
if (environment.contains("beta"))
{filename = LogFilePath+ 'BETA environment - GetNotifications.txt'}
def inputFile = new File(fileName)
inputFile.append("\n" +" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
inputFile.append("\n" +"Timestamp CET:" + timestamp)
inputFile.append("\n"+environment+" - GetNotifications")
inputFile.append("\n"+"Response size :" + messageExchange.responseContent.size())
inputFile.append("\n"+"Time :" + messageExchange.getTimeTaken() +" ms")
inputFile.append("\n"+"Number of notifications: " +y.size())
inputFile.append("\n"+"Time averaged for 1 notification in ms: " + (Math.round(((messageExchange.getTimeTaken())/y.size())*1)/1 )+" ms")
}
Example from output:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Timestamp CET:2018-03-13 15:05:41
[notifications-api-test-XXXXXXX] - Get Notifications
Response size :1195436
Time :1603 ms
Number of notifications: 24
Time averaged for 1 notification in ms: 67 ms