Skip to content

Instantly share code, notes, and snippets.

@isaacgr
Created January 4, 2021 19:03
Show Gist options
  • Save isaacgr/316b645ba8a22512b75cd3ff7fd47d69 to your computer and use it in GitHub Desktop.
Save isaacgr/316b645ba8a22512b75cd3ff7fd47d69 to your computer and use it in GitHub Desktop.
A basic twisted.trial setup
from twisted.internet import defer, reactor
from twisted.trial import unittest, runner, itrial, reporter
from argparse import ArgumentParser
import logging
FORMAT = "%(asctime)s:%(levelname)s:%(name)s:%(message)s"
datefmt = "%Y-%m-%d-%H:%M:%S"
log = logging.getLogger(__name__)
class TestLoaderWithKwargs(runner.TestLoader):
def loadClass(self, klass, **kwargs):
"""
Given a class which contains test cases, return a sorted list of
C{TestCase} instances.
"""
if not (isinstance(klass, type) or isinstance(klass, types.ClassType)):
raise TypeError("%r is not a class" % (klass,))
if not runner.isTestCase(klass):
raise ValueError("%r is not a test case" % (klass,))
names = self.getTestCaseNames(klass)
tests = self.sort([self._makeCase(klass, self.methodPrefix+name, **kwargs)
for name in names])
return self.suiteFactory(tests)
def _makeCase(self, klass, methodName, **kwargs):
return klass(methodName, **kwargs)
class TestSequence(unittest.TestCase):
def __init__(self, testName, factory=None):
unittest.TestCase.__init__(self, testName)
self.factory = factory
def test_1_check_initial_state(self):
d = self.factory.check_state()
return d
def runTests(factory=None):
log.info('Starting test sequence for %s' % factory.id)
trialRunner = runner.TrialRunner(reporter.TreeReporter, realTimeErrors=True,
forceGarbageCollection=True, workingDirectory="factory_%s" % factory.id)
loader = TestLoaderWithKwargs()
suite = loader.loadClass(TestSequence, factory=factory)
trialRunner.run(suite)
def _tearDownClass(factory):
pass
def _setup():
pass
def parse_commandline():
parser = ArgumentParser()
parser.add_argument(
'--log-file', help='File for logging')
return parser.parse_args()
def main():
options = parse_commandline()
if options.log_file:
logfile = options.log_file
logging.basicConfig(filename=logfile,
level=logging.INFO, format=FORMAT, datefmt=datefmt)
else:
logging.basicConfig(stream=sys.stdout,
level=logging.INFO, format=FORMAT, datefmt=datefmt)
objs = []
# _setup()
for obj in objs:
runTests(factory=obj)
_tearDownClass(obj)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment