def post_to_autolog(self, elapsedtime): self.logger.info('posting results to autolog') # This is all autolog stuff. # See: https://wiki.mozilla.org/Auto-tools/Projects/Autolog from mozautolog import RESTfulAutologTestGroup testgroup = RESTfulAutologTestGroup(testgroup=self.testgroup, os='android', platform='emulator', harness='marionette', server=self.es_server, restserver=self.rest_server, machine=socket.gethostname()) testgroup.set_primary_product(tree='b2g', buildtype='opt', revision=self.revision) testgroup.add_test_suite(testsuite='b2g emulator testsuite', elapsedtime=elapsedtime.seconds, cmdline='', passed=self.passed, failed=self.failed, todo=self.todo) # Add in the test failures. for f in self.failures: testgroup.add_test_failure(test=f[0], text=f[1], status=f[2]) testgroup.submit()
def make_testgroups(self, results_collection): testgroups = [] for context in results_collection.contexts: coll = results_collection.subset(lambda t: t.context == context) passed = coll.tests_with_result('PASS') failed = coll.tests_with_result('UNEXPECTED-FAIL') unexpected_passes = coll.tests_with_result('UNEXPECTED-PASS') errors = coll.tests_with_result('ERROR') skipped = coll.tests_with_result('SKIPPED') known_fails = coll.tests_with_result('KNOWN-FAIL') testgroup = RESTfulAutologTestGroup( testgroup=context.testgroup, os=context.os, platform=context.arch, harness=context.harness, server=self.es_server, restserver=self.rest_server, machine=context.hostname, logfile=context.logfile, ) testgroup.add_test_suite( testsuite=results_collection.suite_name, elapsedtime=coll.time_taken, passed=count(passed), failed=count(failed) + count(errors) + count(unexpected_passes), todo=count(skipped) + count(known_fails), ) testgroup.set_primary_product( tree=context.tree, revision=context.revision, productname=context.product, buildtype=context.buildtype, ) # need to call this again since we already used the generator for f in coll.tests_with_result('UNEXPECTED-FAIL'): testgroup.add_test_failure( test=long_name(f), text='\n'.join(f.output), status=f.result, ) testgroups.append(testgroup) return testgroups
def post_to_autolog(self, elapsedtime): self.logger.info('posting results to autolog') logfile = None if self.emulator: filename = os.path.join(os.path.abspath(self.logcat_dir), "emulator-%d.log" % self.marionette.emulator.port) if os.access(filename, os.F_OK): logfile = filename for es_server in self.es_servers: # This is all autolog stuff. # See: https://wiki.mozilla.org/Auto-tools/Projects/Autolog from mozautolog import RESTfulAutologTestGroup testgroup = RESTfulAutologTestGroup( testgroup=self.testgroup, os='android', platform='emulator', harness='marionette', server=es_server, restserver=None, machine=socket.gethostname(), logfile=logfile) testgroup.set_primary_product( tree=self.tree, buildtype='opt', revision=self.revision) testgroup.add_test_suite( testsuite='b2g emulator testsuite', elapsedtime=elapsedtime.seconds, cmdline='', passed=self.passed, failed=self.failed, todo=self.todo) # Add in the test failures. for f in self.failures: testgroup.add_test_failure(test=f[0], text=f[1], status=f[2]) testgroup.submit()
def process_test_log(self, test_parameters, logfilehandle): test_log = None test_runs = [] if test_parameters['use_newparser']: logfilehandle.close() logfilehandle = open(logfilehandle.name) try: # Turn off verbose logging for the log parser logger = logging.getLogger('logparser') logger_effectiveLevel = logger.getEffectiveLevel() logger.setLevel(logging.WARN) test_log = newlogparser.parse_log(logfilehandle) test_runs = test_log.convert(test_parameters['include_pass']) finally: logger.setLevel(logger_effectiveLevel) logfilehandle.close() else: lp = LogParser([logfilehandle.name], es=False, es_server=None, includePass=True, output_dir=None, logger=self.logger, harnessType=test_parameters['harness_type']) # Use logparser's parsers, but do not allow it to # submit data directly to elasticsearch. test_runs.append(lp.parseFiles()) if test_parameters['es_server'] is None or test_parameters[ 'rest_server'] is None: return # testgroup must match entry in autolog/js/Config.js:testNames # os must match entry in autolog/js/Config.js:OSNames # platform must match entry in autolog/js/Config.js:OSNames logfilename = None if test_parameters['submit_log']: logfilename = logfilehandle.name chunk_descriptor = '' if test_parameters['total_chunks'] > 1: chunk_descriptor = 's-%d' % test_parameters['this_chunk'] testgroup_name = '%s%s' % (test_parameters['test_name'], chunk_descriptor) platform_name = self.phone_cfg['machinetype'] self.loggerdeco.debug('testgroup_name = %s' % testgroup_name) testgroup = RESTfulAutologTestGroup( index=test_parameters['index'], testgroup=testgroup_name, os='android', platform=platform_name, harness=test_parameters['harness_type'], server=test_parameters['es_server'], restserver=test_parameters['rest_server'], machine=self.phone_cfg['phoneid'], logfile=logfilename) testgroup.set_primary_product(tree=test_parameters['tree'], buildtype='opt', buildid=test_parameters['buildid'], revision=test_parameters['revision']) for testdata in test_runs: if self.logger.getEffectiveLevel() == logging.DEBUG: self.loggerdeco.debug('Begin testdata') self.loggerdeco.debug(json.dumps(testdata, indent=4)) self.loggerdeco.debug('End testdata') testgroup.add_test_suite(testsuite=testgroup_name, cmdline=test_parameters['cmdline'], passed=testdata.get('passed', None), failed=testdata.get('failed', None), todo=testdata.get('todo', None)) for t in testdata.get('failures', {}): test = t["test"] for f in t["failures"]: text = f["text"] status = f["status"] testgroup.add_test_failure(test=test, text=text, status=status) # Submitting passing tests not supported via REST API if test_parameters['include_pass']: for t in testdata.get('passes', {}): test = t["test"] duration = None if "duration" in t: duration = t["duration"] testgroup.add_test_pass(test=test, duration=duration) testgroup.submit()