Source code for schrodinger.test.performance.api
"""
Base class for performance tests. Stores build_id and buildtype, automatically
reports when complete
"""
import unittest
from typing import Optional
from schrodinger.test.performance import reporter
[docs]class PerformanceTest:
    """
    Pytest test class that reports results during tear down class.  Note that
    the class name must start with "Test" to be picked up.  This class must be
    used instead of `PerformanceTestClass` when using pytest features that
    aren't supported in TestCase subclasses, such as parametrization.
    """
    # Subclasses must define these:
    NAME = None
    PRODUCT = None
    DESCRIPTION = None
    # The test loader sets these. They are used in reporting
    build_id = None
    buildtype = None
    report = None
[docs]    @classmethod
    def setup_class(cls):
        if not all((cls.NAME, cls.PRODUCT, cls.DESCRIPTION)):
            msg = ("NAME, PRODUCT, and DESCRIPTION are required for "
                   "ReporterTestCase subclasses.")
            raise NotImplementedError(msg)
        if cls.report:
            cls.reporter = reporter.create_performance_test_reporter(
                name=cls.NAME,
                product=cls.PRODUCT,
                description=cls.DESCRIPTION,
                scival=False,
                upload=True)
[docs]    def addResult(self, name: str, value: float, units: Optional[str] = None):
        """
        Log a result to be reported to the performance database.
        """
        if self.report:
            return self.reporter.addResult(name, value, units)
        elif units is not None:
            print(f" Would have recorded {name}: {value} {units}")
        else:
            print(f" Would have recorded {name}: {value}")
[docs]    @classmethod
    def teardown_class(cls):
        """Report all results to the performance database."""
        if cls.report:
            cls.reporter.report(build_id=cls.build_id, buildtype=cls.buildtype)
[docs]class PerformanceTestCase(PerformanceTest, unittest.TestCase):
    """Unittest TestCase that reports results during tearDownClass"""
    # This class intentionally left blank