def doSheet(self, excelAPP, sheetName): Log.debug('start: ExcelColumnFixture.doSheet') sheet = self.excelAPP.getShByName(sheetName) self.excelAPP.setSheet(sheet) ncols = sheet.ncols nrows = sheet.nrows try: fixturePath, rowpos = self.getFixturePath(0, ncols) if fixturePath == '': # if have not fixture row, use default fixture print 'warning:' print 'no specify fixture path or fixture in the first row in excel' print 'automation will use default fixture, apifixture.TempleteFixture' Log.debug('automation use default fixture, apifixture.TempleteFixture') fixturePath = 'apifixture.TempleteFixture' #sys.exit(0) #fixturePath = 'apifixture.TempleteFixture' _CLASSNAME = fixturePath.split('.')[-1] i = fixturePath.split('$') if len(i) == 1: exec 'import ' + fixturePath # test class method exec 'fixture = ' + fixturePath + '.' + _CLASSNAME + '()' else: exec "import %s" % (i[0],) exec "fixture = %s.%s()" % (i[0], i[1]) except ImportError, e: Log.exception(e) print 'fixturePath does not exists' print 'system exit' return
def bind (self, heads, expandColumnsTag = None): self.columnBindings = [None] * heads.size() i = 0 while heads: name = heads.text() # strip ' ','\n' name = name.replace(' ', '') name = name.replace('\n','') sufix = "()" try: if name[-len(sufix):] == sufix: self.columnBindings[i] = \ self.bindMethod(name[:-len(sufix)]) if expandColumnsTag is not None: setattr(self, 'rowspan', 2) # added in 2009/08/21, the first row means show test result, second test data style = heads.getStyle() if style is None: style = '' try: heads.addToBody(self.getExpandheads(style)) except AttributeError, e: Log.info('please implement getExpandheads()!') Log.exception(e) else: # name is field self.columnBindings[i] = self.bindField(name)
def bind(self, heads, expandColumnsTag=None): self.columnBindings = [None] * heads.size() i = 0 while heads: name = heads.text() # strip ' ','\n' name = name.replace(' ', '') name = name.replace('\n', '') sufix = "()" try: if name[-len(sufix):] == sufix: self.columnBindings[i] = \ self.bindMethod(name[:-len(sufix)]) if expandColumnsTag is not None: setattr( self, 'rowspan', 2 ) # added in 2009/08/21, the first row means show test result, second test data style = heads.getStyle() if style is None: style = '' try: heads.addToBody(self.getExpandheads(style)) except AttributeError, e: Log.info('please implement getExpandheads()!') Log.exception(e) else: # name is field self.columnBindings[i] = self.bindField(name)
def doSheet(self, excelAPP, sheetName): Log.debug('start: ExcelColumnFixture.doSheet') sheet = self.excelAPP.getShByName(sheetName) self.excelAPP.setSheet(sheet) ncols = sheet.ncols nrows = sheet.nrows try: fixturePath, rowpos = self.getFixturePath(0, ncols) if fixturePath == '': # if have not fixture row, use default fixture print 'warning:' print 'no specify fixture path or fixture in the first row in excel' print 'automation will use default fixture, apifixture.TempleteFixture' Log.debug( 'automation use default fixture, apifixture.TempleteFixture' ) fixturePath = 'apifixture.TempleteFixture' #sys.exit(0) #fixturePath = 'apifixture.TempleteFixture' _CLASSNAME = fixturePath.split('.')[-1] i = fixturePath.split('$') if len(i) == 1: exec 'import ' + fixturePath # test class method exec 'fixture = ' + fixturePath + '.' + _CLASSNAME + '()' else: exec "import %s" % (i[0], ) exec "fixture = %s.%s()" % (i[0], i[1]) except ImportError, e: Log.exception(e) print 'fixturePath does not exists' print 'system exit' return
def runTest(self): Log.debug('start: DcgFixture.runTest') print 'now start to test......' starttime = datetime.datetime.now() runTime = 0 try: Log.info('iteration count: ' + str(GlobalSetting.ITERATION)) iterationCount = GlobalSetting.ITERATION if type(iterationCount) != types.IntType: iterationCount = 0 while True: path = 'reports\\' if not os.path.exists(path): os.mkdir(path) dcg = TextFixture() dcg.doTextTest(self.textfilename, path + self.outreportname) endtime = datetime.datetime.now() runTime = (endtime - starttime).seconds print 'run time(seconds) is: ' + str(runTime) try: if GlobalSetting.RUNTIME > 0: if runTime > GlobalSetting.RUNTIME: break elif iterationCount < 1: break except BaseException, e: Log.exception(e) break iterationCount -= 1 except (KeyboardInterrupt, SystemExit), e: print 'user Interrupt test' Log.exception(e) os._exit(0)
def doTables(self,tables, expandColumnsTag = None) : self.summary["run date"] = time.ctime(time.time()) self.summary["run elapsed time"] = RunTime() while tables: try: heading = tables.at(0,0,0) if expandColumnsTag is not None: tempTuple = expandColumnsTag.split('=') heading.modifyTagValue(tempTuple[0], tempTuple[1]) except BaseException, e: Log.exception(e) if heading: try: path = heading.text() #path = re.sub(r'^fit\.','',path) #try to cure the fits of madness _CLASSNAME = path.split('.')[-1] # fix for illegal Java trick in AllFiles. Frankly, I like it! i = path.split('$') if len(i) == 1: exec 'import '+path #test class method exec 'fixture = '+path+'.'+_CLASSNAME+'()' else: exec "import %s" % (i[0],) exec "fixture = %s.%s()" % (i[0], i[1]) fixture.counts = self.counts fixture.summary = self.summary fixture.doTable(tables, expandColumnsTag) except Exception, e: self.exception(heading, e)
def doTables(self, tables, expandColumnsTag=None): self.summary["run date"] = time.ctime(time.time()) self.summary["run elapsed time"] = RunTime() while tables: try: heading = tables.at(0, 0, 0) if expandColumnsTag is not None: tempTuple = expandColumnsTag.split('=') heading.modifyTagValue(tempTuple[0], tempTuple[1]) except BaseException, e: Log.exception(e) if heading: try: path = heading.text() #path = re.sub(r'^fit\.','',path) #try to cure the fits of madness clas = path.split('.')[-1] # fix for illegal Java trick in AllFiles. Frankly, I like it! i = path.split('$') if len(i) == 1: exec 'import ' + path #test class method exec 'fixture = ' + path + '.' + clas + '()' else: exec "import %s" % (i[0], ) exec "fixture = %s.%s()" % (i[0], i[1]) fixture.counts = self.counts fixture.summary = self.summary fixture.doTable(tables, expandColumnsTag) except Exception, e: self.exception(heading, e)
def openReport(self): Log.debug(self.reportNameList) for reportName in self.reportNameList: try: print reportName webbrowser.open_new(reportName) except BaseException, e: Log.exception(e)
def __init__(self, path): self.path = path print path try: self.doc = xml.dom.minidom.parse(path) except: Log.exception('can not create doc document object') print 'system exit' os._exit(0)
def removeChildsOfNode(self, node): try: if node != None: nl = node._get_childNodes() for n in nl: if n.nodeType == xml.dom.Node.ELEMENT_NODE: node.removeChild(n) Log.debug('have successfully removed element') except BaseException, e: Log.exception(e)
def getStyle(self): result = '' try: place1 = self.tag.find('style') if place1 > -1: place2 = self.tag.find("'", place1 + 7) # get last "'" of the tag. style = '...' if place2 > -1: result = self.tag[place1:place2 + 1] except BaseException, e: Log.exception(e)
def getStyle(self): result = '' try: place1 = self.tag.find('style') if place1 > -1: place2 = self.tag.find( "'", place1 + 7) # get last "'" of the tag. style = '...' if place2 > -1: result = self.tag[place1:place2 + 1] except BaseException, e: Log.exception(e)
def removeTextNodesByNodename(self, nodeName): try: elementList = self.getElementList(nodeName) for element in elementList: if element.nodeType == xml.dom.Node.TEXT_NODE: self.doc.removeChild(element) continue else: el = element._get_childNodes() for e in el: if e.nodeType == xml.dom.Node.TEXT_NODE: element.removeChild(e) except BaseException, e: Log.exception(e)
def doRows(self, rowpos, nrows, ncols): Log.debug('start: ExcelColumnFixture.doRows') self.title, rowpos = self.getTitle(rowpos, ncols) rowpos = self.processHeads(rowpos, ncols) #setup before test if hasattr(self, 'initSetupFixture') and self.initSetupFixture: self.runInitSetupFixture() self.repstr = self.getReportHeader(self.curShName, needscrips=True) self.failrepstr = self.getReportHeader(self.curShName, needscrips=True) self.repstr += self.getReportTableHeader() self.failrepstr += self.getReportTableHeader() try: startcolumnPos = 0 heads, rowpos = self.getHeads(rowpos, startcolumnPos, ncols) self.heads = self.stripHeads(heads) # strip space , '\n' self.colspan = len(self.heads) self.repstr += self.getReportTitle(self.title) self.failrepstr += self.getReportTitle(self.title) #self.processReportHeads() if self.note: self.repstr += self.getReporth2header(self.note, 'H4') if self.interface and self.function: self.repstr += self.getReporth2header( self.interface + self.function, 'H3') self.failrepstr += self.getReporth2header( self.interface + self.function, 'H3') self.repstr += self.getReportTableColumnName(self.heads) self.failrepstr += self.getReportTableColumnName(self.heads) self.defineVarAndTypeDict(self.heads) # redefine variable type # if hasattr(self, 'testCaseId') == False: # exec 'ExcelColumnFixture.testCaseId = 0' Log.debug('heads:', heads) self.bind(self.heads) row = rowpos while row < nrows: self.restInitVar() rowdata, row = self.doCells(row, startcolumnPos, ncols, nrows) self.repstr += self.getReportTableRow(rowdata) if self.results[self.testCaseId] == 'fail': self.failrepstr += self.getReportTableRow(rowdata) self.repstr += self.getReportTableTail() self.failrepstr += self.getReportTableTail() if self.isMakeReporterFlag: self.repstr += self.getReportTail(self.counts.toString()) self.failrepstr += self.getReportTail() self.genHtmlfile(self.failrepstr, self.failReportFileName) self.genHtmlfile(self.repstr, self.reportFileName) self.saveCounts() except BaseException, e: Log.exception(e)
def runTest(self): Log.debug('start: HtmlRunner.runTest') tags = ("html", "table", "tr", "td") print 'now start to test......' starttime = datetime.datetime.now() runTime = 0 try: Log.info('iteration count: ' + str(GlobalSetting.ITERATION)) iterationCount = GlobalSetting.ITERATION if type(iterationCount) != types.IntType: iterationCount = 0 count = 0 while True: self.tables = Parse(self.input, tags) # look for html tag enclosing tables self.fixture.doTables(self.tables.parts, self.expandColumnsTag) self.output.write(str(self.tables)) self.output.flush() self.output.close() endtime = datetime.datetime.now() runTime = (endtime - starttime).seconds #=============================================================================== # if runTime < 10: # print 'run time is less than 10 second, maybe run STAT occur error,system exit' #=============================================================================== print 'run time(seconds) is: ' + str(runTime) try: if GlobalSetting.RUNTIME > 0: if runTime > GlobalSetting.RUNTIME: break elif iterationCount < 1: break except BaseException, e: Log.exception(e) break iterationCount -= 1 if GlobalSetting.NEEDREPORTS: temp = self.outreportname.split('.')[-2] # get file path pathTuple = temp.split('\\') #split file name, path count += 1 if os.path.exists('reports\\') is not True: os.mkdir('reports\\') report = 'reports\\' + pathTuple[-1] + '(' + str( count) + ')' + '.html' self.output = open(report, 'w') except (KeyboardInterrupt, SystemExit), e: print 'user Interrupt test' Log.exception(e) os._exit(0)
def doRows(self, rowpos, nrows, ncols): Log.debug('start: ExcelColumnFixture.doRows') self.title, rowpos = self.getTitle(rowpos, ncols) rowpos = self.processHeads(rowpos, ncols) #setup before test if hasattr(self, 'initSetupFixture') and self.initSetupFixture: self.runInitSetupFixture() self.repstr = self.getReportHeader(self.curShName, needscrips=True) self.failrepstr = self.getReportHeader(self.curShName, needscrips=True) self.repstr += self.getReportTableHeader() self.failrepstr += self.getReportTableHeader() try: startcolumnPos = 0 heads, rowpos = self.getHeads(rowpos, startcolumnPos, ncols) self.heads = self.stripHeads(heads) # strip space , '\n' self.colspan = len(self.heads) self.repstr += self.getReportTitle(self.title) self.failrepstr += self.getReportTitle(self.title) #self.processReportHeads() if self.note: self.repstr += self.getReporth2header(self.note, 'H4') if self.interface and self.function: self.repstr += self.getReporth2header(self.interface + self.function, 'H3') self.failrepstr += self.getReporth2header(self.interface + self.function, 'H3') self.repstr += self.getReportTableColumnName(self.heads) self.failrepstr += self.getReportTableColumnName(self.heads) self.defineVarAndTypeDict(self.heads) # redefine variable type # if hasattr(self, 'testCaseId') == False: # exec 'ExcelColumnFixture.testCaseId = 0' Log.debug('heads:', heads) self.bind(self.heads) row = rowpos while row < nrows: self.restInitVar() rowdata, row = self.doCells(row, startcolumnPos, ncols, nrows) self.repstr += self.getReportTableRow(rowdata) if self.results[self.testCaseId] == 'fail' : self.failrepstr += self.getReportTableRow(rowdata) self.repstr += self.getReportTableTail() self.failrepstr += self.getReportTableTail() if self.isMakeReporterFlag: self.repstr += self.getReportTail(self.counts.toString()) self.failrepstr += self.getReportTail() self.genHtmlfile(self.failrepstr, self.failReportFileName) self.genHtmlfile(self.repstr, self.reportFileName) self.saveCounts() except BaseException, e: Log.exception(e)
def doTextTest(self, textFileName, reportname): self.textFileName = textFileName self.reportname = reportname file_object = open(self.textFileName, 'r') try: fixturePath = str(file_object.readline()) fixturePath = self.strip(fixturePath) self.urlpath = self.strip(file_object.readline()) if self.urlpath.find('url:') > -1: self.urlpath = self.urlpath.split(':')[-1] self.readedLines += 1 else: self.urlpath = '' print fixturePath if fixturePath.find( 'fixture' ) == -1: # if have not fixture row, use default fixture fixturePath = 'fixture.TextFixture' else: self.readedLines += 1 clas = fixturePath.split('.')[-1] # fix for illegal Java trick in AllFiles. Frankly, I like it! i = fixturePath.split('$') try: if len(i) == 1: exec 'import ' + fixturePath # # test class method exec 'fixture = ' + fixturePath + '.' + clas + '()' else: exec "import %s" % (i[0], ) exec "fixture = %s.%s()" % (i[0], i[1]) except ImportError, e: Log.exception(e) print 'fixturePath does not exists' print 'system exit' return fixture.fixturePath = fixturePath fixture.textFileName = self.textFileName fixture.reportname = self.reportname fixture.readedLines = self.readedLines fixture.urlpath = self.urlpath fixture.runTest()
def doTextTest(self, textFileName, reportname): self.textFileName = textFileName self.reportname = reportname file_object = open(self.textFileName, 'r') try: fixturePath = str(file_object.readline()) fixturePath = self.strip(fixturePath) self.urlpath = self.strip(file_object.readline()) if self.urlpath.find('url:') > -1: self.urlpath = self.urlpath.split(':')[-1] self.readedLines += 1 else: self.urlpath = '' print fixturePath if fixturePath.find('fixture') == -1: # if have not fixture row, use default fixture fixturePath = 'fixture.TextFixture' else: self.readedLines += 1 _CLASSNAME = fixturePath.split('.')[-1] # fix for illegal Java trick in AllFiles. Frankly, I like it! i = fixturePath.split('$') try: if len(i) == 1: exec 'import ' + fixturePath # # test class method exec 'fixture = ' + fixturePath + '.' + _CLASSNAME + '()' else: exec "import %s" % (i[0],) exec "fixture = %s.%s()" % (i[0], i[1]) except ImportError, e: Log.exception(e) print 'fixturePath does not exists' print 'system exit' return fixture.fixturePath = fixturePath fixture.textFileName = self.textFileName fixture.reportname = self.reportname fixture.readedLines = self.readedLines fixture.urlpath = self.urlpath fixture.runTest()
class TextRunner(): ''' run all test cases of html tables support stress test ''' textfilename = '' outreportname = '' def __init__(self, argv): # output-file argv not exists,deafault name :Year-m-d-h-m-sreport.html if len(argv) < 2: sys.stderr.write("usage: python input-file output-file\n") sys.exit(-1) # output-file argv not exists,deafault name :Year-m-d-h-m-sreport.html if len(argv) == 2: self.outreportname = time.strftime('%Y-%m-%d-%H-%M-%S') + 'report.html' elif(len(argv) > 2): self.outreportname = argv[2] self.textfilename = argv[1] def __call__(self): self.setUp() self.runTest() self.tearDown() print 'the test report name is: %s, please review' % (self.outreportname) try: #if have not iteration, open report by automatic if GlobalSetting.ITERATION == 0 and GlobalSetting.RUNTIME == 0: # webbrowser.open_new(self.outreportname) # open test report pass except: pass self.exit() print 'call over' def runTest(self): Log.debug('start: DcgFixture.runTest') print 'now start to test......' starttime = datetime.datetime.now() runTime = 0 try: Log.info('iteration count: ' + str(GlobalSetting.ITERATION)) iterationCount = GlobalSetting.ITERATION if type(iterationCount) != types.IntType: iterationCount = 0 while True: path = 'reports\\' if not os.path.exists(path): os.mkdir(path) dcg = TextFixture() dcg.doTextTest(self.textfilename, path + self.outreportname) endtime = datetime.datetime.now() runTime = (endtime - starttime).seconds print 'run time(seconds) is: ' + str(runTime) try: if GlobalSetting.RUNTIME > 0: if runTime > GlobalSetting.RUNTIME: break elif iterationCount < 1: break except BaseException, e: Log.exception(e) break iterationCount -= 1 except (KeyboardInterrupt, SystemExit), e: print 'user Interrupt test' Log.exception(e) os._exit(0) except BaseException, e: print e Log.exception(e) os._exit(0)
class HtmlRunner(): ''' run all test cases of html tables support stress test ''' input = None tables = None fixture = Fixture() output = None outfile = None expandColumnsTag = None #expand html table column, like 'colspan=23' outreportname = None def __init__(self, argv): # output-file argv not exists,deafault name :Year-m-d-h-m-sreport.html if len(argv) < 2: sys.stderr.write("usage: python input-file output-file\n") sys.exit(-1) # output-file argv not exists,deafault name :Year-m-d-h-m-sreport.html if len(argv) == 2: self.outreportname = 'reports\\' + time.strftime( '%Y-%m-%d-%H-%M-%S') + 'report.html' argv.append(self.outreportname) elif (len(argv) > 2): self.outreportname = argv[2] infile = open(argv[1], 'r') modtime = time.ctime(os.fstat(infile.fileno())[stat.ST_MTIME]) self.outfile = open(argv[2], 'w') self.fixture.summary["input file"] = os.path.abspath(argv[1]) self.fixture.summary["input update"] = modtime self.fixture.summary["output file"] = os.path.abspath(argv[2]) self.input = infile.read() infile.close() self.output = self.outfile def __call__(self): self.setUp() self.runTest() self.tearDown() print 'the test report name is: %s, please review' % ( self.outreportname) try: #if have not iteration, open report by automatic if GlobalSetting.ITERATION == 0 and GlobalSetting.RUNTIME == 0: webbrowser.open_new(self.outreportname) # open test report #pass except: pass self.exit() print 'call over' def runTest(self): Log.debug('start: HtmlRunner.runTest') tags = ("html", "table", "tr", "td") print 'now start to test......' starttime = datetime.datetime.now() runTime = 0 try: Log.info('iteration count: ' + str(GlobalSetting.ITERATION)) iterationCount = GlobalSetting.ITERATION if type(iterationCount) != types.IntType: iterationCount = 0 count = 0 while True: self.tables = Parse(self.input, tags) # look for html tag enclosing tables self.fixture.doTables(self.tables.parts, self.expandColumnsTag) self.output.write(str(self.tables)) self.output.flush() self.output.close() endtime = datetime.datetime.now() runTime = (endtime - starttime).seconds #=============================================================================== # if runTime < 10: # print 'run time is less than 10 second, maybe run STAT occur error,system exit' #=============================================================================== print 'run time(seconds) is: ' + str(runTime) try: if GlobalSetting.RUNTIME > 0: if runTime > GlobalSetting.RUNTIME: break elif iterationCount < 1: break except BaseException, e: Log.exception(e) break iterationCount -= 1 if GlobalSetting.NEEDREPORTS: temp = self.outreportname.split('.')[-2] # get file path pathTuple = temp.split('\\') #split file name, path count += 1 if os.path.exists('reports\\') is not True: os.mkdir('reports\\') report = 'reports\\' + pathTuple[-1] + '(' + str( count) + ')' + '.html' self.output = open(report, 'w') except (KeyboardInterrupt, SystemExit), e: print 'user Interrupt test' Log.exception(e) os._exit(0) except BaseException, e: self.exception(e) Log.exception(e) os._exit(0)
else: bresult = 0 message = "expect result column is null, maybe error!\n the url:%s \n" % self.url if bresult > 0: self.right(cell, message) elif bresult == 0: self.wrong(cell, message) else: self.output(cell, message) try: cell.text = cell.text + self.link except: cell.text = self.link except BaseException, e: self.exception(cell, e) Log.exception(e) Log.debug('end runTest: ' + self._CLASSNAME) def doRequest(self, url, reqargs, requestMethod): respData = None #开始HTTP请求 try: resp = self.client.dorequest(url, reqargs, \ methodname=requestMethod) if self.url.find('login') > -1: #如果是一个登陆的url self.initInfoBeforeTest['cookie'] = self.client.getCookie(resp.info()) if isinstance(resp, str): respData = resp else: respData = resp.read() Log.debugvar('respData is ', respData)