def generate_series(): session = api.get_session() if CONF.start_date: start_date = datetime.datetime.strptime(CONF.start_date, '%Y-%m-%d') else: start_date = None if CONF.stop_date: stop_date = datetime.datetime.strptime(CONF.start_date, '%Y-%m-%d') else: stop_date = None run_status = api.get_runs_by_status_grouped_by_run_metadata( CONF.command.metadata_key, start_date=start_date, stop_date=stop_date, session=session) perc_data = {} for key in run_status: if run_status[key].get('pass'): pass_num = float(run_status[key]['pass']) else: pass_num = 0.0 if run_status[key].get('fail'): fail_num = float(run_status[key]['fail']) else: fail_num = 0.0 fail_rate = float(fail_num / (pass_num + fail_num) * 100) if fail_rate > 0.0: perc_data[key] = fail_rate plt.figure() plt.barh(range(len(perc_data)), perc_data.values(), align='center') locs, labels = plt.yticks(range(len(perc_data)), list(perc_data.keys())) plt.xlabel('Failure Percentage') plt.tight_layout() plt.savefig(CONF.output, dpi=900)
def test_get_runs_by_status_grouped_by_run_metadata(self): # Generating 20 runs: # 10 with no failures # 10 with 10 failures # 7 in 2010/2011 each, 6 in 2012 # 10 in projecta/projectb each for i in moves.range(20): if i % 2 == 1: fails = 10 else: fails = 0 year = 2010 + (i % 3) run_at = datetime.datetime(year, 1, i + 1, 12, 0, 0) run = api.create_run(fails=fails, passes=10, run_at=run_at) self.assertIsNotNone(run) if i < 10: project = 'projecta' else: project = 'projectb' meta_dict = {'project': project} api.add_run_metadata(meta_dict, run.id) result = api.get_runs_by_status_grouped_by_run_metadata( 'project', start_date='2012-01-01', stop_date='2012-12-31') # There should be two projects self.assertEqual(2, len(result.keys())) self.assertTrue('projecta' in result) self.assertTrue('projectb' in result) # There should be passes and failures self.assertEqual(2, len(result['projecta'].keys())) self.assertTrue('pass' in result['projecta']) self.assertTrue('fail' in result['projecta']) self.assertEqual(2, len(result['projectb'].keys())) self.assertTrue('pass' in result['projectb']) self.assertTrue('fail' in result['projectb']) self.assertEqual(2, result['projecta']['pass']) self.assertEqual(1, result['projecta']['fail']) self.assertEqual(1, result['projectb']['pass']) self.assertEqual(2, result['projectb']['fail'])
def test_get_runs_by_status_grouped_by_run_metadata(self): # Generating 20 runs: # 10 with no failures # 10 with 10 failures # 7 in 2010/2011 each, 6 in 2012 # 10 in projecta/projectb each for i in moves.range(20): if i % 2 == 1: fails = 10 else: fails = 0 year = 2010 + (i % 3) run_at = datetime.datetime(year, 1, i + 1, 12, 0, 0) run = api.create_run(fails=fails, passes=10, run_at=run_at) self.assertIsNotNone(run) if i < 10: project = 'projecta' else: project = 'projectb' meta_dict = {'project': project} api.add_run_metadata(meta_dict, run.id) result = api.get_runs_by_status_grouped_by_run_metadata( 'project', start_date='2012-01-01', stop_date='2012-12-31') # There should be two projects self.assertEqual(2, len(result.keys())) self.assertTrue('projecta' in result) self.assertTrue('projectb' in result) # There should be passes and failures self.assertEqual(2, len(result['projecta'].keys())) self.assertTrue('pass' in result['projecta']) self.assertTrue('fail' in result['projecta']) self.assertEqual(2, len(result['projectb'].keys())) self.assertTrue('pass' in result['projectb']) self.assertTrue('fail' in result['projectb']) self.assertEqual(2, result['projecta']['pass']) self.assertEqual(1, result['projecta']['fail']) self.assertEqual(1, result['projectb']['pass']) self.assertEqual(2, result['projectb']['fail'])