[SDFAB-490] Add TAP output for TestON
Change-Id: Ic63285fd8b46972c36ea302b23980e087615f025
diff --git a/TestON/core/logger.py b/TestON/core/logger.py
index 7826017..72db4c9 100644
--- a/TestON/core/logger.py
+++ b/TestON/core/logger.py
@@ -97,6 +97,12 @@
main.wikiFile.write( main.TEST + " at " + currentTime + "<p></p>\n" )
main.wikiFile.close()
+ # TAP file header
+ main.TAPFile = open( main.TAPFileName, "w+" )
+ main.TAPFile.write( "TAP version 13\n" )
+ main.TAPFile.close()
+
+
def initlog( self, main ):
'''
Initialise all the log handles.
@@ -115,6 +121,7 @@
main.LogFileName = main.logdir + "/" + main.TEST + "_" + str( currentTime ) + ".log"
main.ReportFileName = main.logdir + "/" + main.TEST + "_" + str( currentTime ) + ".rpt"
main.WikiFileName = main.logdir + "/" + main.TEST + "Wiki.txt"
+ main.TAPFileName = main.logdir + "/" + main.TEST + ".tap"
main.SummaryFileName = main.logdir + "/" + main.TEST + "Summary.txt"
main.JenkinsCSV = main.logdir + "/" + main.TEST + ".csv"
main.resultFile = main.logdir + "/" + main.TEST + "Result.txt"
@@ -166,6 +173,18 @@
main.log.wiki = wiki
+ def TAP( msg ):
+ '''
+ Will append the message to the txt file for TAP.
+ '''
+ main.log._log( 6, msg, "OpenFlowAutoMattion", "OFAutoMation" )
+ main.TAPFile = open( main.TAPFileName, "a+" )
+ main.TAPFile.write( msg + "\n" )
+ main.TAPFile.close()
+
+ main.log.TAP = TAP
+
+
def exact( exmsg ):
'''
Will append the raw formatted message to the logs
@@ -338,19 +357,23 @@
main.TOTAL_TC_NORESULT = main.TOTAL_TC_NORESULT + 1
main.log.exact( "\n " + "*" * 29 + "\n" + "\n Result: No Assertion Called \n" + "*" * 29 + "\n" )
line = "Case " + case + ": " + main.CurrentTestCase + " - No Result"
+ main.log.TAP( "ok - %s # TODO No assert called" % line )
elif currentResult == 1:
main.TOTAL_TC_RUN = main.TOTAL_TC_RUN + 1
main.TOTAL_TC_PASS = main.TOTAL_TC_PASS + 1
main.log.exact( "\n" + "*" * 29 + "\n Result: Pass \n" + "*" * 29 + "\n" )
line = "Case " + case + ": " + main.CurrentTestCase + " - PASS"
+ main.log.TAP( "ok - %s" % line )
elif currentResult == 0:
main.TOTAL_TC_RUN = main.TOTAL_TC_RUN + 1
main.TOTAL_TC_FAIL = main.TOTAL_TC_FAIL + 1
main.log.exact( "\n" + "*" * 29 + "\n Result: Failed \n" + "*" * 29 + "\n" )
line = "Case " + case + ": " + main.CurrentTestCase + " - FAIL"
+ main.log.TAP( "not ok - %s" % line )
else:
main.log.error( " Unknown result of case " + case +
". Result was: " + currentResult )
line = "Case " + case + ": " + main.CurrentTestCase + " - ERROR"
+ main.log.TAP( "not ok - %s" % line )
main.log.wiki( "<h3>" + line + "</h3>" )
main.log.summary( line )
diff --git a/TestON/core/teston.py b/TestON/core/teston.py
index 632c56c..ff01b00 100644
--- a/TestON/core/teston.py
+++ b/TestON/core/teston.py
@@ -235,6 +235,7 @@
self.code = test.getStepCode()
repeat = int( self.params.get( 'repeat', 1 ) )
self.TOTAL_TC_PLANNED = len( self.testcases_list ) * repeat
+ self.log.TAP( "1..%s" % self.TOTAL_TC_PLANNED )
result = self.TRUE
while repeat:
@@ -303,34 +304,76 @@
self.testCaseResult[ str( self.CurrentTestCaseNumber ) ] = self.CASERESULT
self.organizeResult( self.CurrentTestCaseNumber, self.CASERESULT )
self.logger.updateCaseResults( self )
- self.log.wiki( "<p>" + self.caseExplanation + "</p>" )
self.log.summary( self.caseExplanation )
- self.log.wiki( "<ul>" )
- subcaseMessage = False
- for line in self.stepCache.splitlines():
- if re.search( "[0-9]\.[0-9]", line ): # Step
- if subcaseMessage: # End of Failure Message Printout
- self.log.wiki( "</ul>\n" )
- subcaseMessage = False
- if re.search( " - PASS$", line ):
- self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"tick\" /></li>\n" )
- elif re.search( " - FAIL$", line ):
- self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"cross\" /></li>\n" )
- elif re.search( " - No Result$", line ):
- self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"warning\" /></li>\n" )
- else: # Substep
- if not subcaseMessage: # Open Failure Message Printout
- self.log.wiki( "<ul><li>" + line + "</li>\n" )
- subcaseMessage = True
- else: # Add to Failure Message Printout
- self.log.wiki( "<li>" + line + "</li>\n" )
- if subcaseMessage: # End of Failure Message Printout for last item
- self.log.wiki( "</ul>\n" )
- self.log.wiki( "</ul>" )
self.log.summary( self.stepCache )
+ self.caseResultsWiki()
+ self.caseResultsTAP()
self.stepCache = ""
return result
+ def caseResultsWiki( self ):
+ """
+ Add case results to the wiki results file
+ """
+ self.log.wiki( "<p>" + self.caseExplanation + "</p>" )
+ self.log.wiki( "<ul>" )
+ subcaseMessage = False
+ for line in self.stepCache.splitlines():
+ if re.search( "[0-9]\.[0-9]", line ): # Step
+ if subcaseMessage: # End of Failure Message Printout
+ self.log.wiki( "</ul>\n" )
+ subcaseMessage = False
+ if re.search( " - PASS$", line ):
+ self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"tick\" /></li>\n" )
+ elif re.search( " - FAIL$", line ):
+ self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"cross\" /></li>\n" )
+ elif re.search( " - No Result$", line ):
+ self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"warning\" /></li>\n" )
+ else: # Substep
+ if not subcaseMessage: # Open Failure Message Printout
+ self.log.wiki( "<ul><li>" + line + "</li>\n" )
+ subcaseMessage = True
+ else: # Add to Failure Message Printout
+ self.log.wiki( "<li>" + line + "</li>\n" )
+ if subcaseMessage: # End of Failure Message Printout for last item
+ self.log.wiki( "</ul>\n" )
+ self.log.wiki( "</ul>" )
+
+ def caseResultsTAP( self ):
+ """
+ Add case results to the TAP results file
+ """
+ #self.log.TAP( "<p>" + self.caseExplanation + "</p>" )
+ main.log.debug( self.stepCache )
+ subcaseMessage = False
+ steps = 0
+ stepLines = []
+ for line in self.stepCache.splitlines():
+ main.log.debug( line )
+ if re.search( "[0-9]\.[0-9]", line ): # Step
+ if subcaseMessage: # End of Failure Message Printout
+ subcaseMessage = False
+ if re.search( " - PASS$", line ):
+ steps += 1
+ stepLines.append( " ok -- STEP %s" % line )
+ elif re.search( " - FAIL$", line ):
+ steps += 1
+ stepLines.append( " not ok -- STEP %s" % line )
+ elif re.search( " - No Result$", line ):
+ steps += 1
+ stepLines.append( " ok -- STEP %s # TODO: No assertion in test step" % line )
+ else: # Substep
+ if not subcaseMessage: # Open Failure Message Printout
+ stepLines.append( " # %s" % line )
+ subcaseMessage = True
+ else: # Add to Failure Message Printout
+ self.log.TAP( " # %s" % line )
+ if steps > 0:
+ self.log.TAP( " 1..%s" % steps )
+ for line in stepLines:
+ self.log.TAP( line )
+
+
def organizeResult( self, caseNum, result ):
"""
Organize the result and put the current number into either
@@ -382,18 +425,8 @@
self.log.exception( "" )
self.stepCount = self.stepCount + 1
self.logger.updateCaseResults( self )
- # WIKI results
- self.log.wiki( "<ul>" )
- for line in self.stepCache.splitlines():
- if re.search( " - PASS$", line ):
- self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"tick\" /></li>\n" )
- elif re.search( " - FAIL$", line ):
- self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"cross\" /></li>\n" )
- elif re.search( " - No Result$", line ):
- self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"warning\" /></li>\n" )
- else: # Should only be on fail message
- self.log.wiki( "<ul><li>" + line + "</li></ul>\n" )
- self.log.wiki( "</ul>" )
+ self.stepResultsWiki()
+ self.stepResultsTAP()
# summary results
self.log.summary( self.stepCache )
self.stepCache = ""
@@ -408,6 +441,40 @@
result = self.cleanup()
return self.FALSE
+ def stepResultsWiki( self ):
+ """
+ Add step results to the wiki file
+ """
+ # WIKI results
+ self.log.wiki( "<ul>" )
+ for line in self.stepCache.splitlines():
+ if re.search( " - PASS$", line ):
+ self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"tick\" /></li>\n" )
+ elif re.search( " - FAIL$", line ):
+ self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"cross\" /></li>\n" )
+ elif re.search( " - No Result$", line ):
+ self.log.wiki( "<li>" + line + " <ac:emoticon ac:name=\"warning\" /></li>\n" )
+ else: # Should only be on fail message
+ self.log.wiki( "<ul><li>" + line + "</li></ul>\n" )
+ self.log.wiki( "</ul>" )
+
+ def stepResultsTAP( self ):
+ """
+ Add step results to the TAP file
+ """
+ # TAP results
+ # TODO Do we need indetation for the steps?
+ main.log.debug( "StepResultsTAP" )
+ for line in self.stepCache.splitlines():
+ if re.search( " - PASS$", line ):
+ self.log.TAP( " ok -- STEP %s" % line )
+ elif re.search( " - FAIL$", line ):
+ self.log.TAP( " not ok -- STEP %s" % line )
+ elif re.search( " - No Result$", line ):
+ self.log.TAP( " ok -- STEP %s # TODO: No assertion in test step" % line )
+ else: # Should only be on fail message
+ self.log.TAP( " # %s" % line )
+
def parseStepResults( self, testCaseNumber ):
"""
Parse throught the step results for the wiki
diff --git a/TestON/drivers/common/cli/hostdriver.py b/TestON/drivers/common/cli/hostdriver.py
index 3232361..ba8b1b9 100644
--- a/TestON/drivers/common/cli/hostdriver.py
+++ b/TestON/drivers/common/cli/hostdriver.py
@@ -125,7 +125,7 @@
for r in self.tempRoutes:
self.deleteRoute( *r )
# Disconnect from the host
- if not self.options[ 'inband' ] == 'True':
+ if not self.options.get( 'inband', False ) == 'True':
self.handle.sendline( "" )
self.handle.expect( self.prompt )
self.handle.sendline( "exit" )