Package: rotest
Watch the demoRotest is a resource oriented testing framework, for writing system or
integration tests.Rotest is based on Python’sunittestmodule and on the Django framework.
It enables defining simple abstracted components in the system, called
resources. The resources may be DUT (devices under test) or they may help
the test process. The tests look very much like tests written using the
builtin moduleunittest.Why Use Rotest?Allowing teams to share resources without interfering with one another.Easily abstracting automated components in the system.Lots of useful features: multiprocess, filtering tests, variety of output
handlers (and the ability to create custom ones), and much more.ExamplesFor a complete step-by-step explanation about the framework, you can read
our documentation atRead The Docs. If you just want
to see how it looks, read further.For our example, let’s look at an example for aCalculatorresource:importosimportrpycfromdjango.dbimportmodelsfromrotest.management.modelsimportresource_datafromrotest.managementimportbase_resourceclassCalculatorData(resource_data.ResourceData):classMeta:app_label="resources"ip_address=models.IPAddressField()classCalculator(base_resource.BaseResource):DATA_CLASS=CalculatorDataPORT=1357EXECUTABLE_PATH=os.path.join(os.path.expanduser("~"),"calc.py")defconnect(self):self._rpyc=rpyc.classic.connect(self.data.ip_address,self.PORT)defcalculate(self,expression):result=self._rpyc.modules.subprocess.check_output(["python",self.EXECUTABLE_PATH,expression])returnint(result.strip())deffinalize(self):ifself._rpycisnotNone:self._rpyc.close()self._rpyc=NoneTheCalculatorDataclass is a standard Django model that exposes IP
address of the calculator machine through the data attribute.
Also, we’re usingrpycfor automating the access to those machines. Except
from that, it’s easy to notice how theconnectmethod is making the
connection to the machine, and how thefinalizemethod is cleaning
afterwards.Now, an example for a test:fromrotestimportmainfromrotest.coreimportTestCaseclassSimpleCalculationTest(TestCase):calculator=Calculator()deftest_simple_calculation(self):self.assertEqual(self.calculator.calculate("1+2"),3)if__name__=="__main__":main()The test may include thesetUpandtearDownmethods ofunittestas
well, and it differs only in the request for resources.Following, those are the options exposed when running the test:$rotest-hRun tests in a module or directory.

Usage:
    rotest [<path>...] [options]

Options:
    -h,  --help
            Show help message and exit.
    --version
            Print version information and exit.
    -c <path>, --config <path>
            Test configuration file path.
    -s, --save-state
            Enable saving state of resources.
    -d <delta-iterations>, --delta <delta-iterations>
            Enable run of failed tests only - enter the number of times the
            failed tests should be run.
    -p <processes>, --processes <processes>
            Use multiprocess test runner - specify number of worker
            processes to be created.
    -o <outputs>, --outputs <outputs>
            Output handlers separated by comma.
    -f <query>, --filter <query>
            Run only tests that match the filter expression,
            e.g. 'Tag1* and not Tag13'.
    -n <name>, --name <name>
            Assign a name for current launch.
    -l, --list
            Print the tests hierarchy and quit.
    -F, --failfast
            Stop the run on first failure.
    -D, --debug
            Enter ipdb debug mode upon any test exception.
    -S, --skip-init
            Skip initialization and validation of resources.
    -r <query>, --resources <query>
            Specify resources to request by attributes,
            e.g. '-r res1.group=QA,res2.comment=CI'.