injecting the testclient during Test Loader process

Without this the tests do not have access to the client APIs
This commit is contained in:
Prasanna Santhanam 2012-07-07 21:51:08 +05:30 committed by Prasanna Santhanam
parent db5687d691
commit 84b69e6e0a

View File

@ -40,6 +40,7 @@ class NoseCloudStackTestLoader(nose.loader.TestLoader):
tests = [] tests = []
for testCaseName in testCaseNames: for testCaseName in testCaseNames:
testCase = testCaseClass(testCaseName) testCase = testCaseClass(testCaseName)
self._injectClients(testCase)
tests.append(testCase) tests.append(testCase)
return self.suiteClass(tests) return self.suiteClass(tests)
else: else:
@ -51,6 +52,24 @@ class NoseCloudStackTestLoader(nose.loader.TestLoader):
def loadTestsFromNames(self, names, module=None): def loadTestsFromNames(self, names, module=None):
return nose.loader.TestLoader.loadTestsFromNames(self, names, module=module) return nose.loader.TestLoader.loadTestsFromNames(self, names, module=module)
def setClient(self, client):
self.testclient = client
def setClientLog(self, clientlog):
self.log = clientlog
def _injectClients(self, test):
testcaselogger = logging.getLogger("testclient.testcase.%s"%test.__class__.__name__)
fh = logging.FileHandler(self.log)
fh.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s"))
testcaselogger.addHandler(fh)
testcaselogger.setLevel(logging.DEBUG)
setattr(test, "testClient", self.testclient)
setattr(test, "debug", partial(testCaseLogger, logger=testcaselogger))
setattr(test.__class__, "clstestclient", self.testclient)
if hasattr(test, "UserName"):
self.testclient.createNewApiClient(test.UserName, test.DomainName, test.AcctType)
class NoseTestExecuteEngine(object): class NoseTestExecuteEngine(object):
""" """
@ -81,14 +100,14 @@ class NoseTestExecuteEngine(object):
if workingdir is not None: if workingdir is not None:
self.loader = NoseCloudStackTestLoader() self.loader = NoseCloudStackTestLoader()
self.suite = self.loader.loadTestsFromName(workingdir) self.loader.setClient(self.testclient)
for test in self.suite: self.loader.setClientLog(self.logfile)
self.injectClients(test) self.suite = self.loader.loadTestsFromDir(workingdir)
elif filename is not None: elif filename is not None:
self.loader = NoseCloudStackTestLoader() self.loader = NoseCloudStackTestLoader()
self.loader.setClient(self.testclient)
self.loader.setClientLog(self.logfile)
self.suite = self.loader.loadTestsFromFile(filename) self.suite = self.loader.loadTestsFromFile(filename)
for test in self.suite:
self.injectClients(test)
else: else:
raise EnvironmentError("Need to give either a test directory or a test file") raise EnvironmentError("Need to give either a test directory or a test file")
@ -98,17 +117,6 @@ class NoseTestExecuteEngine(object):
self.runner = xmlrunner.XMLTestRunner(output='xml-reports', verbose=True) self.runner = xmlrunner.XMLTestRunner(output='xml-reports', verbose=True)
def runTests(self): def runTests(self):
nose.core.TestProgram(argv=["--process-timeout=3600"], testRunner=self.runner, testLoader=self.loader) #nose.core.TestProgram(argv=["--process-timeout=3600"], testRunner=self.runner, testLoader=self.loader)
nose.core.TestProgram(argv=["--process-timeout=3600"], \
def injectClients(self, test): testRunner=self.runner, suite=self.suite)
testcaselogger = logging.getLogger("testclient.testcase.%s"%test.__class__.__name__)
fh = logging.FileHandler(self.logfile)
fh.setFormatter(self.logformat)
testcaselogger.addHandler(fh)
testcaselogger.setLevel(logging.DEBUG)
setattr(test, "testClient", self.testclient)
setattr(test, "debug", partial(testCaseLogger, logger=testcaselogger))
setattr(test.__class__, "clstestclient", self.testclient)
if hasattr(test, "UserName"):
self.testclient.createNewApiClient(test.UserName, test.DomainName, test.AcctType)