def test_update_build_summary(self): values1 = [1, 2, 3, 4, 5] values2 = [2, 4, 6, 8] new_test_run = self.build1.test_runs.create(environment=self.env1) new_test_run.metrics.create(name='new_foo', suite=self.suite1, result=5) self.receive_testrun(self.build1.version, self.env1.slug, tests_file='{"suite1/new_foo": "pass"}') summary1 = BuildSummary.create_or_update(self.build1, self.env1) summary2 = BuildSummary.create_or_update(self.build1, self.env2) self.assertTrue(summary1.has_metrics) self.assertTrue(eq(geomean(values1), summary1.metrics_summary)) self.assertTrue(summary2.has_metrics) self.assertTrue(eq(geomean(values2), summary2.metrics_summary)) self.assertEqual(5, summary1.tests_total) self.assertEqual(2, summary1.tests_pass) self.assertEqual(1, summary1.tests_fail) self.assertEqual(1, summary1.tests_skip) self.assertEqual(1, summary1.tests_xfail) self.assertEqual(3, summary2.tests_total) self.assertEqual(1, summary2.tests_pass) self.assertEqual(1, summary2.tests_fail) self.assertEqual(1, summary2.tests_skip) self.assertEqual(0, summary2.tests_xfail)
def handle(self, *args, **options): start_date = timezone.make_aware(options['start_date']) end_date = timezone.make_aware(options['end_date']) project_name = options['project'] or False show_progress = options['show_progress'] builds = Build.objects.filter( datetime__range=(start_date, end_date), status__finished=True ) project = None if project_name: slugs = project_name.split('/') if len(slugs) != 2: logger.error('Project "%s" is malformed (should be group_slug/project_slug). Exiting...' % (project_name)) return try: group_slug, project_slug = slugs project = Project.objects.get(group__slug=group_slug, slug=project_slug) except Project.DoesNotExist: logger.error('Project "%s" does not exist. Exiting...' % (project_name)) return logger.info('Filtering builds from project "%s"' % (project_name)) builds = builds.filter(project=project) logger.info('Computing metrics summary for %d builds' % (builds.count())) if show_progress: logger.info('Showing progress, one dot means one processed build') for build in builds.all(): self.__progress__(show_progress) for environment in __get_environments__(build): BuildSummary.create_or_update(build, environment) if show_progress: self.stdout.write("") self.stdout._out.flush()
def test_basic_build_summary(self): values1 = [1, 2, 3, 4] values2 = [2, 4, 6, 8] summary1 = BuildSummary.create_or_update(self.build1, self.env1) summary2 = BuildSummary.create_or_update(self.build1, self.env2) self.assertTrue(summary1.has_metrics) self.assertTrue(summary2.has_metrics) self.assertTrue(eq(geomean(values1), summary1.metrics_summary)) self.assertTrue(eq(geomean(values2), summary2.metrics_summary)) self.assertEqual(4, summary1.tests_total) self.assertEqual(1, summary1.tests_pass) self.assertEqual(1, summary1.tests_fail) self.assertEqual(1, summary1.tests_skip) self.assertEqual(1, summary1.tests_xfail) self.assertEqual(3, summary2.tests_total) self.assertEqual(1, summary2.tests_pass) self.assertEqual(1, summary2.tests_fail) self.assertEqual(1, summary2.tests_skip) self.assertEqual(0, summary2.tests_xfail)
def __call__(testrun): BuildSummary.create_or_update(testrun.build, testrun.environment)
def test_build_with_empty_metrics(self): summary = BuildSummary.create_or_update(self.build2, self.env1) self.assertFalse(summary.has_metrics)