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'])
Ejemplo n.º 4
0
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'])
Ejemplo n.º 8
0
    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'])