Forum Discussion
Thanks for your response Rao,
I am using below groovy code as an assertion script for a test step.
//get the path of the project root
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def projectPath = groovyUtils.projectPath
log.info(" projectPath : "+projectPath)
//get the test suite name
def testSuiteName_appName = messageExchange.modelItem.testStep.testCase.testSuite.getName()
log.info(" testSuiteName_appName : "+testSuiteName_appName)
//get the test case name
def tcaseName_dashboardName = messageExchange.modelItem.testCase.getName()
log.info(" tcaseName_dashboardName : "+tcaseName_dashboardName)
//get the test step name
def testStepName = messageExchange.modelItem.testStep.getName()
log.info(" testStepName : "+testStepName)
if(execution_mode == "testExecution" ) {
File file = new File("/tmp/Assertion_Files/"+testSuiteName_appName+"/"+tcaseName_dashboardName+"/"+testStepName+".txt")
BufferedReader br = new BufferedReader(new FileReader(file));
String fileStatement;
def newString = "";
while ((fileStatement = br.readLine()) != null) {
newString = newString + fileStatement.toString();
}
def expected_data_in_file = newString.trim().replace(' ', '');
expected_data_in_file = expected_data_in_file.replace("\n", "").replace("\r", "");
def splunkRestApiResponse = context.response.toString().trim().replace(' ', '');
splunkRestApiResponse = splunkRestApiResponse.replace("\n", "").replace("\r", "");
log.info(" splunkRestApiResponse "+splunkRestApiResponse);
log.info(" fileResponse trimmed "+expected_data_in_file) ;
assert(splunkRestApiResponse.equals(expected_data_in_file));
log.info(" Assertion Passed ") ;
}
It is working fine. As this is a generic code and all of my teststeps have same groovy assertion script. Is there a way to put this script at one place and then call it from each assertion script. This will help me to reduce my effort whenever there is a change in groovy script.
I think i remember Radford sets up libraries and stuff like that so he might be able to suggest some options.
Ive got a possiblity but i dont know if it is feasible. You "might" be able to add an event handler to do ehat you need, maybe TestRunListener.afterStep option with your script and using the 'Target' column in the events window to target specific test steps (give the teststeps in each testcase that need the assertion identical names....then you add in this teststep name into the Target column).
That way youd only need to add your code into the event handler editable field once and you wouldnt need to add it anywhere else.
Youd have to change your code slightly cos i think the events uses testRunner rather than messageExchange (script assertions dont have access to testRunner which is why youre using messageExchange instead).
The only problem i can foresee with this is reporting the assertion failure. I dont know how this would/could work, but i thought id mention this option just in case it can be done with a little effort. Id be interested to see if it would work myself.
Nice one,
Rich
- nmrao5 years agoChampion Level 3
Event handling is not suitable here.
- assertions have different purpose that's why they are there
- assertion vary from step to step, may not all step need the same assertions
- assertions allows to execute them on need basis
- since event is fired all the time, it tries to execute the code even though it is not needed
- And richie pointed well that "i can foresee with this is reporting the assertion failure" - is classic example for unfit to use event handling.
Related Content
- 6 years ago
- 2 years ago
Recent Discussions
- 22 days ago