Resource oriented testing framework
Project description
Rotest is a resource oriented testing framework, for writing system or integration tests.
Rotest is based on Python’s unittest module 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 module unittest.
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.
Examples
For a complete step-by-step explanation about the framework, you can read our documentation at Read The Docs. If you just want to see how it looks, read further.
For our example, let’s look at an example for a Calculator resource:
import os
import rpyc
from django.db import models
from rotest.management import base_resource
from rotest.management.models import resource_data
class CalculatorData(resource_data.ResourceData):
class Meta:
app_label = "resources"
ip_address = models.IPAddressField()
class Calculator(base_resource.BaseResource):
DATA_CLASS = CalculatorData
PORT = 1357
EXECUTABLE_PATH = os.path.join(os.path.expanduser("~"),
"calc.py")
def connect(self):
self._rpyc = rpyc.classic.connect(self.data.ip_address,
self.PORT)
def calculate(self, expression):
result = self._rpyc.modules.subprocess.check_output(
["python", self.EXECUTABLE_PATH, expression])
return int(result.strip())
def finalize(self):
if self._rpyc is not None:
self._rpyc.close()
self._rpyc = None
The CalculatorData class is a standard Django model that exposes IP address of the calculator machine through the data attribute. Also, we’re using rpyc for automating the access to those machines. Except from that, it’s easy to notice how the connect method is making the connection to the machine, and how the finalize method is cleaning afterwards.
Now, an example for a test:
from rotest.core.runner import main
from rotest.core.case import TestCase, request
class SimpleCalculationTest(TestCase):
resources = [request("calculator", Calculator)]
def test_simple_calculation(self):
self.assertEqual(self.calculator.calculate("1+2"), 3)
if __name__ == "__main__":
main(SimpleCalculationTest)
The test can include the setUp and tearDown methods of unittest as well, and it differs only in the request for resources. The request includes the target member name, the requested class and might include more parameters for finding the suitable resource.
Following, those are the options exposed when running the test:
$ python test.py --help
Usage: test.py [options]
Options:
-h, --help show this help message and exit
-c CONFIG_PATH, --config-path=CONFIG_PATH
Tests' configuration file path
-s, --save-state Enable save state
-d DELTA_ITERATIONS, --delta-iterations=DELTA_ITERATIONS
Enable run of unsuccessful tests only, enter the
number of times the failed tests should run
-p PROCESSES, --processes=PROCESSES
Use multiprocess test runner
-o OUTPUTS, --outputs=OUTPUTS
Output handlers separated by comma. Options: dots,
xml, full, remote, tree, excel, db, artifact,
signature, loginfo, logdebug
-f FILTER, --filter=FILTER
Run only tests that match the filter expression, e.g
"Tag1* and not Tag13"
-n RUN_NAME, --name=RUN_NAME
Assign run name
-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 RESOURCES, --resources=RESOURCES
Specific resources to request by name
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file rotest-2.7.6.tar.gz
.
File metadata
- Download URL: rotest-2.7.6.tar.gz
- Upload date:
- Size: 93.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a44eaa17125d98b8510f4d399e61cb0d48039cc3d1eb274d151b82c664df81f |
|
MD5 | 9effd5c263ccba969aa4d5bb73d428a8 |
|
BLAKE2b-256 | 97c7e50dbc98af083840a58e14ab453423a5252593a9a25b099526cab5644d5a |
File details
Details for the file rotest-2.7.6-py2.py3-none-any.whl
.
File metadata
- Download URL: rotest-2.7.6-py2.py3-none-any.whl
- Upload date:
- Size: 150.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bf6de86d00c6c830d119e63d54332a6624d3785515dd71bf07a77348a1ac2052 |
|
MD5 | f3513d88ec45543f91021b25cd8f764e |
|
BLAKE2b-256 | b839ca3f94b7758ec8dbce56ec2a591762925700f61cc3ba3dc411fc256996d1 |