in DDT-Framework/src/main/groovy/ddt/framework/ReportUtils.groovy [102:260]
Object generateJson (TestCaseRunner testRunner) {
//log.info " ... into generateJson ... "
def testcasesList = new ArrayList()
def tsMap = new LinkedHashMap()
def testCaseRunResult = new TestCaseResult(
name: "",
time: 0,
failSign: false,
resultMessages: new ArrayList(),
failure: new LinkedHashMap())
for(int r=0; r <= testRunner.getResults().size()-1; r++) {
def result = testRunner.getResults().get(r)
def testStep = result.getTestStep()
// go through result messages to search for TC_NAME_PATTERN
for(message in result.getMessages()) {
//log.info "test step result message ${message}"
def matcher = ( message =~ TC_NAME_PATTERN )
if ( matcher ) {
//log.info "when pattern is matched -> ${matcher.group(0)}"
//log.info "current TC ${currentTC}"
if ( testCaseRunResult.name == "" ) {
testCaseRunResult.name = matcher.group(1)
//log.info "currentTC ${testCaseRunResult.name}"
testcasesList.add(testCaseRunResult)
}
else
if ( testCaseRunResult.name != matcher.group(1) ) {
//log.info "...when another test case name..."
def findSimularTestCase = findResultByTestCaseName(testcasesList, matcher.group(1))
//log.info "after a try to find simular test case ${findSimularTestCase}"
if ( findSimularTestCase ) {
// setup found test case to continue
testCaseRunResult = findSimularTestCase
//log.info "... when found the same test..."
}
else {
//log.info "... when start new test..."
testCaseRunResult = new TestCaseResult(
name: matcher.group(1),
time: 0,
failSign: false,
resultMessages: new ArrayList(),
failure: new LinkedHashMap())
testcasesList.add(testCaseRunResult)
}
}
}
} // for (message .... to search TC_NAME_PATTERN ...
// sum time amount
testCaseRunResult.time = testCaseRunResult.time + result.getTimeTaken()
// get test step type (i.e. 'groovy', 'delay', 'properties', 'request', 'restrequest', 'jdbc', etc.)
def type = testStep.config.type
//log.info "test step type ${type}"
// collect specific test step info
switch(type){
case 'manualTestStep': // manual test step -> PAUSE
testCaseRunResult.resultMessages.add("step ${testStep.name} (user do some manual actions)")
break
case 'groovy': // Script test step -> Before, DataDriver, goto Lopper... , After
break
case 'delay': // Delay test step -> WAIT
testCaseRunResult.resultMessages.add("step ${testStep.name} (execution waits some defined in milliseconds time)")
break
//case 'properties': //Properties test step - NOT used in current imlementation
//break
//case 'request': //SOAP Request/Response test step - NOT used in current implementation
//break
case ['restrequest','jdbc']: // Rest,Jdbc request test step -> GET, PUT, POST, DELETE, OPTIONS, JDBC
testCaseRunResult.resultMessages.add("step ${testStep.name}")
def requestResponse = result?.response
if ( requestResponse != null ) {
def rawRequestData = requestResponse.getRawRequestData()
if ( rawRequestData != null ) {
def rawReq = new String(rawRequestData,"UTF-8")
//log.info "rawReq ${rawReq}"
testCaseRunResult.resultMessages.add("REQUEST: " + rawReq)
} else {
testCaseRunResult.resultMessages.add("NO raw request")
}
def rawResponseData = requestResponse.getRawResponseData()
if ( rawResponseData != null ) {
def rawRes = new String(rawResponseData,"UTF-8")
//log.info "rawRes ${rawRes}"
testCaseRunResult.resultMessages.add("RESPONSE: " + rawRes)
} else {
testCaseRunResult.resultMessages.add("NO raw response")
}
} else {
testCaseRunResult.resultMessages.add("NO sent request and incoming response at all")
}
break
} // switch(type) ...
// collect result messages
for(message in result.getMessages()) {
//log.info "test step result message ${message}"
def matcher1 = ( message =~ TC_NAME_PATTERN )
if ( !matcher1 ) {
testCaseRunResult.resultMessages.add(message)
//log.info "collect result messages ${message}"
}
} // for ...
// process fails
if ( result?.getStatus() == TestStepStatus.FAILED ) {
//log.info "...when Fail is detected..."
if ( testCaseRunResult.failSign == false ) {
//log.info "...collect info about fail..."
testCaseRunResult.failure.put("type","Failing due to failed test step")
testCaseRunResult.failure.put("message","Failing due to failed test step ${testStep.name}")
testCaseRunResult.failure.put("info",testCaseRunResult.resultMessages.collect())
}
testCaseRunResult.failSign = true
}
// last iteration
if ( r == testRunner.getResults().size()-1 ) {
//log.info "... last iteration ..."
tsMap.put("testcases",testcasesList)
tsMap.put("name","${projectName}.${suiteName}")
tsMap.put("errors","0")
addSumTestsInfo(testcasesList, tsMap)
} // if ... last iteration ...
} // for(result ...
//log.info "collected Map Object ${tsMap.toString()}"
return JsonOutput.toJson(tsMap)
} // ... generateJson method