def testDryRun(self): """Make sure dryrun mode doesn't upload.""" self.send_func.side_effect = AssertionError('dryrun should not upload') perf_uploader.OutputPerfValue(self.file_name, 'desc1', 40, 'unit') perf_values = perf_uploader.LoadPerfValues(self.file_name) perf_uploader.UploadPerfValues(perf_values, 'platform', 'TestName', cros_version='cros', chrome_version='chrome', dry_run=True)
def testCustomDashboard(self): """Verify we can set data to different dashboards.""" perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit') perf_values = perf_uploader.LoadPerfValues(self.file_name) perf_uploader.UploadPerfValues(perf_values, 'platform', 'TestName', cros_version='cros', chrome_version='chrome', dashboard='http://localhost') request = self.urlopen.call_args[0][0] self.assertEqual('http://localhost/add_point', request.get_full_url())
def testRevision(self): """Verify revision is accepted over cros/chrome version.""" perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit') perf_values = perf_uploader.LoadPerfValues(self.file_name) perf_uploader.UploadPerfValues(perf_values, 'platform', 'TestName', revision=12345) positional_args, _ = self.send_func.call_args first_param = positional_args[0] data = json.loads(first_param['data']) entry = data[0] self.assertEqual(12345, entry['revision'])
def main(argv): parser = GetParser() opts = parser.parse_args(argv) opts.Freeze() logging.info('Uploading results to %s', opts.url) logging.info('Master name: %s', opts.master) logging.info('Test name: %s', opts.test) with tempfile.NamedTemporaryFile() as output: perf_uploader.OutputPerfValue( output.name, opts.description, float(opts.data), opts.units, graph=opts.graph, stdio_uri=opts.stdio_uri) perf_values = perf_uploader.LoadPerfValues(output.name) logging.debug('Uploading:') for value in perf_values: logging.debug(' %s', value) perf_uploader.UploadPerfValues( perf_values, opts.bot, opts.test, revision=opts.revision, cros_version=opts.cros_version, chrome_version=opts.chrome_version, dashboard=opts.url, master_name=opts.master, test_prefix='', platform_prefix='', dry_run=opts.dry_run) data_name = opts.graph if opts.graph else opts.description args = { 'masters': opts.master, 'tests': '%s/%s' % (opts.test, data_name), 'bots': opts.bot, } view_url = os.path.join(opts.url, 'report?%s' % urllib.parse.urlencode(args)) logging.info('View results at %s', view_url) logging.info('Note: To make tests public, visit %s', os.path.join(opts.url, 'change_internal_only')) logging.info('Note: To update the test list, visit %s', os.path.join(opts.url, 'update_test_suites'))
def testTwoEntriesOfSameTest(self): """Upload one test, two perf values.""" perf_uploader.OutputPerfValue(self.file_name, 'desc1', 40, 'unit') perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit') perf_values = perf_uploader.LoadPerfValues(self.file_name) perf_uploader.UploadPerfValues(perf_values, 'platform', 'TestName', cros_version='cros', chrome_version='chrome') positional_args, _ = self.send_func.call_args first_param = positional_args[0] data = json.loads(first_param['data']) self.assertEqual(1, len(data)) entry = data[0] self.assertEqual('unit', entry['units']) # Average of 40 and 42 self.assertEqual(41, entry['value']) # Standard deviation sqrt(2) self.assertEqual(1.4142, entry['error'])
def testOneEntry(self): perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit') perf_values = perf_uploader.LoadPerfValues(self.file_name) perf_uploader.UploadPerfValues(perf_values, 'platform', 'TestName', cros_version='cros', chrome_version='chrome') request = self.urlopen.call_args[0][0] self.assertEqual( os.path.join(perf_uploader.DASHBOARD_URL, 'add_point'), request.get_full_url()) data = request.data data = urllib.parse.parse_qs(data)[b'data'] entries = [json.loads(x) for x in data] entry = entries[0][0] self.assertEqual('cros', entry['supplemental_columns']['r_cros_version']) self.assertEqual(42, entry['value']) self.assertEqual('cbuildbot.TestName/desc1', entry['test']) self.assertEqual('unit', entry['units'])
def testTwoTests(self): """Upload two tests, one perf value each.""" perf_uploader.OutputPerfValue(self.file_name, 'desc1', 40, 'unit') perf_uploader.OutputPerfValue(self.file_name, 'desc2', 42, 'unit') perf_values = perf_uploader.LoadPerfValues(self.file_name) perf_uploader.UploadPerfValues(perf_values, 'platform', 'TestName', cros_version='cros', chrome_version='chrome') positional_args, _ = self.send_func.call_args first_param = positional_args[0] data = json.loads(first_param['data']) self.assertEqual(2, len(data)) data = sorted(data, key=lambda x: x['test']) entry = data[0] self.assertEqual(40, entry['value']) self.assertEqual(0, entry['error']) entry = data[1] self.assertEqual(42, entry['value']) self.assertEqual(0, entry['error'])
def SendPerfValues(self, test_results_dir): """Gather all perf values in |test_results_dir| and send them to chromeperf. The uploading will be retried 3 times for each file. Args: test_results_dir: A path to the directory with perf files. """ # A dict of list of perf values, keyed by test name. perf_entries = collections.defaultdict(list) for root, _, filenames in os.walk(test_results_dir): for relative_name in filenames: if not image_test_lib.IsPerfFile(relative_name): continue full_name = os.path.join(root, relative_name) entries = perf_uploader.LoadPerfValues(full_name) test_name = image_test_lib.ImageTestCase.GetTestName( relative_name) perf_entries[test_name].extend(entries) platform_name = self._run.bot_id try: cros_ver = self._run.GetVersionInfo().VersionString() except cbuildbot_run.VersionNotSetError: logging.error('Could not obtain version info. ' 'Failed to upload perf results.') return chrome_ver = self._run.DetermineChromeVersion() for test_name, perf_values in perf_entries.iteritems(): try: perf_uploader.UploadPerfValues(perf_values, platform_name, test_name, cros_version=cros_ver, chrome_version=chrome_ver) except Exception: logging.exception('Failed to upload perf result for test %s.', test_name)
def testOneEntry(self): """Upload one perf value.""" perf_uploader.OutputPerfValue(self.file_name, 'desc1', 42, 'unit') perf_values = perf_uploader.LoadPerfValues(self.file_name) perf_uploader.UploadPerfValues(perf_values, 'platform', 'TestName', cros_version='cros', chrome_version='chrome') positional_args, _ = self.send_func.call_args first_param = positional_args[0] data = json.loads(first_param['data']) self.assertEqual(1, len(data)) entry = data[0] self.assertEqual('unit', entry['units']) self.assertEqual('cros', entry['supplemental_columns']['r_cros_version']) self.assertEqual('chrome', entry['supplemental_columns']['r_chrome_version']) self.assertEqual('cros-platform', entry['bot']) self.assertEqual(42, entry['value']) self.assertEqual(0, entry['error'])