예제 #1
0
    def test_store_runned_benchmark_instances(self):
        filename = os.path.join(EXAMPLES, 'empty.bench.py')

        runner = BenchmarkRunner(filename)
        runner.run()

        self.assertEqual(len(runner.runned), 1)
        self.assertIsInstance(runner.runned[0], Benchmark)
예제 #2
0
    def test_load_module(self):
        filename = os.path.join(EXAMPLES, 'sort.bench.py')
        runner = BenchmarkRunner()

        module = runner.load_module(filename)

        self.assertEqual(module.__name__, 'benchmarks.sort')
        self.assertTrue(hasattr(module, 'SortDictByValue'))
예제 #3
0
 def test_output_summary_as_json(self):
     filename = os.path.join(EXAMPLES, 'empty.bench.py')
     with NamedTemporaryFile() as out:
         reporter = CsvReporter(out.name)
         runner = BenchmarkRunner(filename, reporters=[reporter])
         runner.run()
         out.flush()
         with open(out.name) as csvfile:
             reader = csv.reader(csvfile, delimiter=str(';'), quotechar=str('"'))
             self.assertEqual(six.next(reader), ['Benchmark', 'Method', 'Times', 'Total (s)', 'Average (s)'])
예제 #4
0
    def test_output_summary_as_json(self):
        filename = os.path.join(EXAMPLES, 'empty.bench.py')
        with NamedTemporaryFile() as out:
            reporter = JsonReporter(out.name)
            runner = BenchmarkRunner(filename, reporters=[reporter])
            runner.run()
            out.flush()
            data = json.loads(out.read().decode('utf8'))

        self.assertEqual(data, reporter.summary())
예제 #5
0
    def test_number_of_headers(self):
        class TestReporter(BaseReporter, FixedWidth):
            pass

        reporter = TestReporter()
        runner = BenchmarkRunner(reporters=[reporter])
        runner.run()

        with self.assertRaises(ValueError):
            reporter.with_sizes('One', 'Header', 'Is', 'Missing')
예제 #6
0
    def test_benchmark_in_debug(self):
        filename = os.path.join(EXAMPLES, 'fail.bench.py')

        runner = BenchmarkRunner(filename, debug=True)
        runner.run()

        self.assertEqual(len(runner.runned), 1)
        self.assertIsInstance(runner.runned[0], Benchmark)

        bench = runner.runned[0]
        self.assertTrue(bench.debug)
예제 #7
0
    def test_one_row_by_benchmark(self):
        class TestReporter(BaseReporter, FixedWidth):
            pass

        class TestBench(Benchmark):
            def bench_short(self):
                pass

        class AnotherBench(Benchmark):
            def bench_short(self):
                pass

        reporter = TestReporter()
        module = ModuleFactory(TestBench, AnotherBench)
        runner = BenchmarkRunner(module, reporters=[reporter])
        runner.run()

        summary = reporter.with_sizes('', 'Method', 'Times', 'Total (s)', 'Average (s)')
        self.assertEqual(len(summary), 2)
예제 #8
0
    def test_hook_reporter(self):
        filename = os.path.join(EXAMPLES, 'empty.bench.py')
        reporter = CountReporter()

        runner = BenchmarkRunner(filename, reporters=[reporter])
        self.assertEqual(len(runner.reporters), 1)
        self.assertEqual(runner.reporters[0], reporter)

        runner.run()

        self.assertEqual(reporter.counts, {
            'start': 1,
            'before_class': 1,
            'after_class': 1,
            'before_method': 1,
            'after_method': 1,
            'progress': 5,
            'end': 1,
        })
예제 #9
0
    def test_output_summary_as_markdown(self):
        filename = os.path.join(EXAMPLES, 'empty.bench.py')
        with NamedTemporaryFile() as out:
            reporter = MarkdownReporter(out.name)
            runner = BenchmarkRunner(filename, reporters=[reporter])
            runner.run()
            out.flush()

            md = out.read()
            html = markdown(md.decode('utf8'), extensions=['markdown.extensions.tables'])
            tree = ET.fromstring('<!DOCTYPE html><html><body>{0}</body></html>'.format(html))

            titles = tree.findall('.//h1')
            self.assertEqual(len(titles), 1)
            self.assertEqual(titles[0].text, 'Empty benchmark')

            tables = tree.findall('.//table')
            self.assertEqual(len(tables), 1)
            columns = tables[0].findall('.//th')
            self.assertEqual(len(columns), 4)
예제 #10
0
    def test_output_summary_as_restructuredtext(self):
        filename = os.path.join(EXAMPLES, 'empty.bench.py')
        with NamedTemporaryFile() as out:
            reporter = RstReporter(out.name)
            runner = BenchmarkRunner(filename, reporters=[reporter])
            runner.run()
            out.flush()

            rst = out.read()
            html = publish_string(rst, writer_name='html')
            tree = ET.fromstring(html)

            titles = self.findall(tree, './/h:h1')
            self.assertEqual(len(titles), 1)
            self.assertEqual(titles[0].text, 'Empty benchmark')

            tables = self.findall(tree, './/h:table')
            self.assertEqual(len(tables), 1)
            columns = self.findall(tables[0], './/h:th')
            self.assertEqual(len(columns), 4)
예제 #11
0
    def test_summary_without_docstrings(self):
        filename = os.path.join(EXAMPLES, 'empty.bench.py')
        reporter = BaseReporter()
        runner = BenchmarkRunner(filename, reporters=[reporter])
        runner.run()

        summary = reporter.summary()
        self.assertEqual(len(summary), 1)

        bench = runner.runned[0]
        key = reporter.key(bench)
        self.assertIn(key, summary)

        bench_summary = summary[key]
        self.assertEqual(bench_summary['name'], 'Empty benchmark')
        self.assertEqual(bench_summary['times'], 5)
        self.assertEqual(len(bench_summary['runs']), 1)

        row = bench_summary['runs']['bench_nothing']
        self.assertEqual(row['name'], 'Nothing')
        self.assertIn('total', row)
        self.assertIn('mean', row)
예제 #12
0
    def test_summary_with_sizes(self):
        class TestReporter(BaseReporter, FixedWidth):
            pass

        class TestBench(Benchmark):
            def bench_short(self):
                pass

            def bench_long(self):
                '''A method with long label'''
                pass

        reporter = TestReporter()
        module = ModuleFactory(TestBench)
        runner = BenchmarkRunner(module, reporters=[reporter])
        runner.run()

        bench = runner.runned[0]
        key = reporter.key(bench)

        summary = reporter.with_sizes('', 'Method', 'Times', 'Total (s)', 'Average (s)')
        self.assertEqual(len(summary), 1)
        self.assertEqual(summary[key]['sizes'][1], len('A method with long label'))
        self.assertEqual(summary[key]['sizes'][2], len('Times'))