TestCenter Reference
Config.py
Go to the documentation of this file.
2# Copyright 2007, MeVis Medical Solutions AG
3#
4# The user may use this file in accordance with the license agreement provided with
5# the Software or, alternatively, in accordance with the terms contained in a
6# written agreement between the user and MeVis Medical Solutions AG.
7#
8# For further information use the contact form at https://www.mevislab.de/contact
9#
10
13
14
15# -- local imports
16try:
17 import mevis
18 mevisAvailable = hasattr(mevis, 'MLAB') and hasattr(mevis.MLAB, 'isDebug') and mevis.MLAB.isDebug() is not None
19except ImportError:
20 mevisAvailable = False
21
22from . import Utils
23from .Utils import deprecated
24
25# -- system imports
26import os
27import sys
28import tempfile
29
30import xml.etree.cElementTree as etree
31
32if sys.version_info.major >= 3:
33 unicode = str
34
35def getConfigFilePath (isTestCaseManager=False):
36 if Utils.isWindows:
37 path = os.path.join( os.environ[ 'LOCALAPPDATA' ], 'MeVis', 'MeVisLab' )
38
39 elif Utils.isLinux:
40 if mevisAvailable:
41 path = mevis.MLABFileManager.getUserApplicationSupportDirectory()
42
43 else:
44 path = os.path.join( os.environ['HOME'], '.local', 'share', 'MeVis', 'MeVisLab' )
45
46 else:
47 path = os.getcwd()
48
49 if ( not os.path.isdir( path )):
50 os.makedirs( path )
51
52 filePattern = "test_case_manager_cfg_{}.xml" if isTestCaseManager else "tc_cfg_{}.xml"
53 return os.path.join( path, filePattern.format( sys.platform ))
54
55
56def verifyConfiguration (cfgFile):
57 if not os.path.isfile(cfgFile):
58 Configuration(cfgFile)
59 return False
60 return True
61
62
64 pass
65
66
67class ReportConfig:
68 def getReportDir(): # @NoSelf
69 reportDir = ""
70 if Utils.isWindows:
71 reportDir = os.path.join(os.getenv("USERPROFILE"), "TestCenterReports")
72 elif Utils.isLinux:
73 reportDir = os.path.join(os.getenv("HOME"), "TestCenterReports")
74
75 return reportDir
76
77
78 def __init__(self,
79 directory = getReportDir(),
80 name = "Report",
81 timestampTemplate = "_%y_%m_%d__%H_%M",
82 appendTestCaseName = False,
83 appendTimestamp = False,
84 collapseFunctions = False,
85 showFailedFuctionsOnly = False,
86 hideInfoMessages = False,
87 hideSystemMessages = False):
88 self.directory = directory
89 self.name = name
90 self.timestampTemplate = timestampTemplate
91 self.appendTestCaseName = appendTestCaseName
92 self.appendTimestamp = appendTimestamp
93 self.collapseFunctions = collapseFunctions
94 self.showFailedFunctionsOnly = showFailedFuctionsOnly
95 self.hideInfoMessages = hideInfoMessages
96 self.hideSystemMessages = hideSystemMessages
99
101 def __init__ (self, filePath=None, autoSave=True, isTestCaseManager=False):
102 """ Loads configuration from given file or creates configuration with default values.
103 If a configuration is created and @a autoSave is True then the configuration is
104 automatically saved. Otherwise, you have to save is explicitly.
105 """
106 self.__setDefaultValues()
107
108 # The default config file name is tc_cfg_<platform>.xml which can be
109 # overwritten by explicitly specifying a filePath.
110 if not filePath:
111 filePath = getConfigFilePath(isTestCaseManager=isTestCaseManager)
112
113 cfgFileToLoad = filePath
114 if not os.path.isfile(cfgFileToLoad):
115 # for backward compatibility: read settings from config file of automated test center
116 cfgFileToLoad = getConfigFilePath(isTestCaseManager=False)
117
118 if os.path.isfile(cfgFileToLoad):
119 self.__load(cfgFileToLoad)
120
121 if autoSave and not os.path.isfile(filePath):
122 if mevisAvailable:
123 warningTemplate = "Config file <a href='mlab-open:{filePath}'>{fileName}</a> does not exist: creating it."
124 mevis.MLAB.logHTML(warningTemplate.format(filePath=filePath,
125 fileName=os.path.basename(filePath)))
126 else:
127 print("Config file %s does not exist: creating it." % (filePath))
128 self.save(filePath)
129
130 self.__configFilePath = os.path.abspath(filePath)
131
132
135 def __setDefaultValues (self):
136 def getArguments():
137 return ["-nosplash", "-noide", "-quick"]
138
140 executablePath = ""
141 if mevisAvailable:
142 if Utils.isWindows:
143 executablePath = os.path.dirname(mevis.MLABFileManager.getExecutable("MeVisLab"))
144 elif Utils.isLinux:
145 executablePath = os.path.dirname(mevis.MLABFileManager.getExecutable("MeVisLab"))
146 elif 'MLAB_BUILD' in os.environ:
147 # developer environment, use that, no questions asked
148 executablePath = os.path.abspath(
149 os.path.join(os.environ.get('MLAB_BUILD'), 'MeVisLab', 'IDE', 'bin'))
150 else:
151 # check public sdk location relative to this file
152 thisDir = os.path.dirname(os.path.abspath(__file__))
153 thisMLABRoot = os.path.normpath(os.path.join(thisDir, '..', '..', '..', '..', '..', '..'))
154 if Utils.isWindows:
155 path = os.path.abspath(os.path.join(thisMLABRoot, 'MeVisLab', 'IDE', 'bin'))
156 if os.path.isfile(os.path.join(path, 'MeVisLab.exe')):
157 executablePath = path
158 elif Utils.isLinux:
159 path = os.path.abspath(os.path.join(thisMLABRoot, '..', 'bin'))
160 if os.path.isfile(os.path.join(path, 'MeVisLab')):
161 executablePath = path
162
163 return executablePath
164
165
166 if Utils.isUnsupportedPlatform:
167 raise Exception("Unsupported platform (%s)" % (sys.platform))
168
171 self.__MLABUseCurrent = True
172 self.__MLABArguments = getArguments()
173 self.__MLABCompileMode = "Automatic"
174 self.__resultOutputDirectory = os.path.join(tempfile.gettempdir(), "TestCenter")
175 self.__xmlResultFileName = "tc_result.xml"
176 self.__MLABSlaveLogFileName = "mevislab_slave.log"
178 # Number of TestCases after which MLAB is restarted during the execution of multiple
179 # tests. If this is set to zero, MLAB is not restarted at all.
181 # If a test is configured with a timeout above this value, do not execute it and let it fail.
183
185
186 self.__usePythonCoverage = False
187 # Controls if the python coverage measured during the execution of tests is accumulated
188 # into one report (True) or if for every test a separate report is generated (False).
189 self.__useGlobalPythonCoverage = False
190 # All files matching one of these expressions
191 # are excluded from the coverage for that test run.
192 exclusionExpressions = ["*/TestSupport/*",
193 "*/TestCenterAdvanced/*",
194 "*/MLABPythonTools/*",
195 "*/*.script*",
196 "*/*.def*",
197 "*/IDE/mevislabInternal.py",
198 "*/__mevislab_bootstrap_importlib.py",
199 "*/Standard/Modules/Scripts/python/PackageSorter.py",
200 "*/BuildTools/Scripts/MeVisPython.py",
201 "*/@@scriptconsole*",
202 "*/site-packages/*",
203 "*$*"]
204
205 #convert to native path format
207 os.path.normpath(expression) for expression in exclusionExpressions
208 ]
209
211
212 # C++ coverage tool
213 self.__useBullseyeCoverage = False
214
216
217 self.__report = ReportConfig()
218
219
220
223 def __load (self, filename):
224 if not os.path.isfile(filename):
225 raise Exception("Given file does not exist: %s" % (filename))
226
227 xmlTree = etree.parse(filename)
228 xmlRoot = xmlTree.getroot()
229
230 self.fetchMLABSettings(xmlRoot)
231 self.fetchReportSettings(xmlRoot)
232 self.fetchCoverageSettings(xmlRoot)
233 self.fetchTestCaseManagerSettings(xmlRoot)
234 self.fetchIPCSettings(xmlRoot)
235
236
237 @staticmethod
239 return node is not None and node.text is not None
240
241
242 def fetchMLABSettings(self, xmlRoot):
243 node = xmlRoot.find("mlab/usecurrent")
244 if self.nodeHasValidText(node):
245 self.__MLABUseCurrent = node.text.lower() in ["true", "1", "yes", "on"]
246 else:
247 self.__MLABUseCurrent = True
248
249 node = xmlRoot.find("mlab/executable")
250 if self.nodeHasValidText(node):
251 self.__MLABExecutablePath = node.text
252
253 if node is not None:
254 mode = node.get("compilemode")
255 if mode:
256 self.__MLABCompileMode = mode
257 elif node.get("usedebug") == "True":
258 self.__MLABCompileMode = "Debug"
259 else:
260 self.__MLABCompileMode = "Automatic"
261
262 node = xmlRoot.find("mlab/arguments")
263 if self.nodeHasValidText(node):
264 self.__MLABArguments = node.text.split(",")
265
266 node = xmlRoot.find("mlab/resultdir")
267 if self.nodeHasValidText(node):
268 self.__resultOutputDirectory = node.text
269
270 node = xmlRoot.find("mlab/resultfile")
271 if self.nodeHasValidText(node):
272 self.__xmlResultFileName = node.text
273
274 node = xmlRoot.find("mlab/slavelogfile")
275 if self.nodeHasValidText(node):
276 self.__MLABSlaveLogFileName = node.text
277
278 node = xmlRoot.find("mlab/timeout")
279 if self.nodeHasValidText(node):
280 self.__defaultTestTimeoutSeconds = int(node.text)
281
282 node = xmlRoot.find("mlab/restartinterval")
283 if self.nodeHasValidText(node):
284 self.__mMLABRestartInterval = int(node.text)
285
286 node = xmlRoot.find("mlab/MaximumTestTimeout")
287 if self.nodeHasValidText(node):
288 self.__maxTestTimeoutSeconds = int(node.text)
289
290
291 def fetchReportSettings(self, xmlRoot):
292 self.fetchReportNodeSettings(xmlRoot)
293
294 node = xmlRoot.find("report/directory")
295 if self.nodeHasValidText(node):
296 self.__report.directory = node.text
297
298 node = xmlRoot.find("report/name")
299 if self.nodeHasValidText(node):
300 self.__report.name = node.text
301
302 node = xmlRoot.find("report/timestamp")
303 if self.nodeHasValidText(node):
304 self.__report.timestampTemplate = node.text
305
306
307 def fetchReportNodeSettings(self, xmlRoot):
308 reportNode = xmlRoot.find("report")
309 if not reportNode is None:
310 self.__report.appendTestCaseName = self.getBoolean(reportNode,
311 self.__report.appendTestCaseName,
312 "appendTestCaseName")
313 self.__report.appendTimestamp = self.getBoolean(reportNode,
314 self.__report.appendTimestamp,
315 "appendTimestamp")
316 self.__report.collapseFunctions = self.getBoolean(reportNode,
317 self.__report.collapseFunctions,
318 "collapseFunctions")
319 self.__report.showFailedFunctionsOnly = self.getBoolean(reportNode,
320 self.__report.showFailedFunctionsOnly,
321 "showFailedOnly")
322 self.__report.hideInfoMessages = self.getBoolean(reportNode,
323 self.__report.hideInfoMessages,
324 "hideInfos")
325 self.__report.hideSystemMessages = self.getBoolean(reportNode,
326 self.__report.hideSystemMessages,
327 "hideSystemMessages")
328 self.__report.maxInfoMessagesPerTestFunction = self.getInteger(reportNode,
329 self.__report.maxInfoMessagesPerTestFunction,
330 "maxInfoMessagesPerTestFunction")
331 self.__report.maxErrorMessagesPerTestFunction = self.getInteger(reportNode,
332 self.__report.maxErrorMessagesPerTestFunction,
333 "maxErrorMessagesPerTestFunction")
334
335 @staticmethod
336 def getBoolean(node, default, attributeName):
337 boolean = default
338
339 attributeValue = node.get(attributeName)
340 if attributeValue is not None:
341 boolean = attributeValue == "True"
342
343 return boolean
344
345 @staticmethod
346 def getInteger(node, default, attributeName):
347 result = default
348
349 attributeValue = node.get(attributeName)
350 if attributeValue is not None:
351 try:
352 result = int(attributeValue)
353 except:
354 print("Error: Can't parse %s with value %s as int." % (attributeName, attributeValue))
355 return result
356
358 node = xmlRoot.find("TestCaseManager")
359 if not node is None:
360 b = self.getBoolean(node, True, "reloadPythonModulesBeforeTestExecution")
362
364 node = etree.SubElement(xmlRoot, "TestCaseManager")
365 node.set("reloadPythonModulesBeforeTestExecution", str(self.__shouldReloadPythonModulesWhenReloadingTestCases))
366
367
368 def fetchCoverageSettings(self, xmlRoot):
369 coverageNode = xmlRoot.find("Coverage")
370 if not coverageNode is None:
371 self.fetchBullseyeCoverageSettings(coverageNode)
372 self.fetchPythonCoverageSettings(coverageNode)
373
374 def fetchBullseyeCoverageSettings(self, coverageNode):
375 bullseyeNode = coverageNode.find("Bullseye")
376 if bullseyeNode is not None:
377 self.fetchUseBullseyeCoverage(bullseyeNode)
378
379 def fetchUseBullseyeCoverage(self, bullseyeNode):
380 self.__useBullseyeCoverage = self.getBoolean(bullseyeNode,
382 "enabled")
383
384 def fetchPythonCoverageSettings(self, coverageNode):
385 pythonCoverageNode = coverageNode.find("Python")
386 if pythonCoverageNode is not None:
387 self.fetchUsePythonCoverage(pythonCoverageNode)
388 self.fetchUseGlobalPythonCoverage(pythonCoverageNode)
389 self.fetchPythonCoverageExclusionExpressions(pythonCoverageNode)
390 self.fetchPythonCoverageInclusionExpressions(pythonCoverageNode)
391
392 def fetchUsePythonCoverage(self, pythonCoverageNode):
393 self.__usePythonCoverage = self.getBoolean(pythonCoverageNode,
395 "enabled")
396
397 def fetchUseGlobalPythonCoverage(self, pythonCoverageNode):
398 self.__useGlobalPythonCoverage = self.getBoolean(pythonCoverageNode,
400 "global")
401
402
404 default = set(self.__pythonCoverageExclusionExpressions)
405 loaded = set([expression.text for expression in coverageNode.findall("ExclusionExpression")])
406 #build union of default and loaded expressions using set type
407 self.__pythonCoverageExclusionExpressions = list(default | loaded)
408 #replace forward slashes with system default
409 self.__pythonCoverageExclusionExpressions = [os.path.normpath(expression)
410 for expression in self.__pythonCoverageExclusionExpressions]
411
413 default = set(self.__pythonCoverageInclusionExpressions)
414 loaded = set([expression.text for expression in coverageNode.findall("InclusionExpression")])
415 #build union of default and loaded expressions using set type
416 self.__pythonCoverageInclusionExpressions = list(default | loaded)
417 #replace forward slashes with system default
418 self.__pythonCoverageInclusionExpressions = [os.path.normpath(expression)
419 for expression in self.__pythonCoverageInclusionExpressions]
420
421 def fetchIPCSettings(self, xmlRoot):
422 node = xmlRoot.find("IPCConnectionTimeout")
423 if self.nodeHasValidText(node):
424 self.__ipcConnectionTimeout = int(node.text)
425
426
429 def save (self, filename = None):
430 xmlRoot = etree.Element("Configuration")
431 xmlTree = etree.ElementTree(xmlRoot)
432
433 mlabNode = etree.SubElement(xmlRoot, "mlab")
434
435 etree.SubElement(mlabNode, "slavelogfile").text = self.__MLABSlaveLogFileName
436 etree.SubElement(mlabNode, "usecurrent").text = "True" if self.__MLABUseCurrent else "False"
437 node = etree.SubElement(mlabNode, "executable")
438 node.set("compilemode", self.__MLABCompileMode)
439 node.text = self.__MLABExecutablePath
440 etree.SubElement(mlabNode, "arguments").text = ",".join(self.__MLABArguments)
441 etree.SubElement(mlabNode, "resultdir").text = self.__resultOutputDirectory
442 etree.SubElement(mlabNode, "resultfile").text = self.__xmlResultFileName
443 etree.SubElement(mlabNode, "timeout").text = str(self.__defaultTestTimeoutSeconds)
444 etree.SubElement(mlabNode, "MaximumTestTimeout").text = str(self.__maxTestTimeoutSeconds)
445 etree.SubElement(mlabNode, "restartinterval").text = str(self.__mMLABRestartInterval)
446
447 reportNode = etree.SubElement(xmlRoot, "report")
448
449 etree.SubElement(reportNode, "directory").text = self.__report.directory
450 etree.SubElement(reportNode, "name").text = self.__report.name
451 etree.SubElement(reportNode, "timestamp").text = self.__report.timestampTemplate
452
453 reportNode.set("appendTestCaseName", unicode(self.__report.appendTestCaseName))
454 reportNode.set("appendTimestamp", unicode(self.__report.appendTimestamp))
455 reportNode.set("collapseFunctions", unicode(self.__report.collapseFunctions))
456 reportNode.set("showFailedOnly", unicode(self.__report.showFailedFunctionsOnly))
457 reportNode.set("hideInfos", unicode(self.__report.hideInfoMessages))
458 reportNode.set("hideSystemMessages", unicode(self.__report.hideSystemMessages))
459 reportNode.set("maxErrorMessagesPerTestFunction", unicode(self.__report.maxErrorMessagesPerTestFunction))
460 reportNode.set("maxInfoMessagesPerTestFunction", unicode(self.__report.maxInfoMessagesPerTestFunction))
461
462 coverageNode = etree.SubElement(xmlRoot, "Coverage")
463
464 pythonCoverageNode = etree.SubElement(coverageNode, "Python")
465 pythonCoverageNode.set("enabled", str(self.__usePythonCoverage))
466 pythonCoverageNode.set("global", str(self.__useGlobalPythonCoverage))
467
468 for expression in self.__pythonCoverageExclusionExpressions:
469 etree.SubElement(pythonCoverageNode, "ExclusionExpression").text = expression
470
471 for expression in self.__pythonCoverageInclusionExpressions:
472 etree.SubElement(pythonCoverageNode, "InclusionExpression").text = expression
473
474 bullseNode = etree.SubElement(coverageNode, "Bullseye")
475 bullseNode.set("enabled", str(self.__useBullseyeCoverage))
476
477 ipcConnectionTimeoutNode = etree.SubElement(xmlRoot, "IPCConnectionTimeout")
478 ipcConnectionTimeoutNode.text = str(self.__ipcConnectionTimeout)
479
480 self.storeTestCaseManagerSettings(xmlRoot)
481
482 Utils.indentXML(xmlRoot)
483
484 if filename == None:
485 filename = self.__configFilePath
486
487 try:
488 xmlTree.write(filename)
489 except Exception as e:
490 mevis.MLAB.logWarningHTML("Unable to write config file: %s.\n%s" % (filename, e))
491
492
494 return os.path.join(self.__resultOutputDirectory, self.__MLABSlaveLogFileName)
495
496
497 def setResultDir (self, directory):
498 self.__resultOutputDirectory = directory
499
500
501 def getResultDir (self):
502 return self.__resultOutputDirectory
503
504
505 def getResultFile (self):
506 return os.path.join(self.__resultOutputDirectory, self.__xmlResultFileName)
507
508
511
512
514 return os.path.expandvars(self.__MLABExecutablePath)
515
516
518 return self.__MLABUseCurrent
519
520
522 return self.getMLABCurrentBinariesPath() if self.getMLABUseCurrent() else self.getMLABBinariesPath()
523
524
525 @staticmethod
526 def findMLABExecutable(basePath, executableName, subPath):
527 """
528 Searches for the executable in the basePath and all levels of the provided
529 subPath in a 'deepest first' manner
530 """
531 path = os.path.normpath(subPath)
532 pathComponents = path.split(os.sep)
533 pathComponents.append(executableName)
534
535 executablePath = None
536 while pathComponents:
537 candidate = os.path.join(basePath, *pathComponents)
538 if os.path.isfile(candidate):
539 executablePath = candidate
540 break
541
542 pathComponents.pop(0)
543
544 if executablePath is None:
546
547 return os.path.normpath(candidate)
548
549
551 expandedMLABPath = self.getMLABEffectiveBinariesPath()
552 mlabExecutableName = "MeVisLab_d" if self.useMLABDebugVersion() else "MeVisLab"
553 if Utils.isWindows:
554 mlabExecutableName += ".exe"
555
556 command = [self.findMLABExecutable(expandedMLABPath, mlabExecutableName, "Packages/MeVisLab/IDE/bin" if Utils.isWindows else "bin")]
557
558 return command
559
560
562 return self.__MLABArguments
563
564
566 return self.__MLABCompileMode
567
568
570 if self.__MLABCompileMode == "Debug":
571 return True
572 elif self.__MLABCompileMode == "Release":
573 return False
574 else:
575 return mevisAvailable and mevis.MLAB.isDebug()
576
577 def setMLABUseDebug (self, useDebug):
578 if useDebug:
579 self.__MLABCompileMode = "Debug"
580 else:
581 self.__MLABCompileMode = "Release"
582
583
587 def setTestCaseManagerOptions(self, shouldReloadPythonModulesWhenReloadingTestCases):
588 self.__shouldReloadPythonModulesWhenReloadingTestCases = shouldReloadPythonModulesWhenReloadingTestCases
589
590
591 def getMLABTestCenterCommand (self, macroName):
592 return ( self.getMLABExecutableCommand()
593 + self.getMLABArguments()
594 + ['-nomateconnection', '-runmacro', macroName, '-c', self.__configFilePath])
595
596
597 def setMLABExecutablePath (self, executablePath):
598 if executablePath:
599 self.__MLABExecutablePath = executablePath
600
601
602 def setMLABUseCurrent (self, usecurrent):
603 self.__MLABUseCurrent = usecurrent
604
605
606 def setMLABArguments (self, arguments):
607 self.__MLABArguments = arguments
608
609
610 def setMLABCompileMode (self, value):
611 self.__MLABCompileMode = value
612
613
619 return self.__configFilePath
620
622 return self.__report
623
625 directory,
626 name,
627 timestampTemplate,
628 appendTestCaseName,
629 appendTimestamp,
630 collapseFunctions,
631 showFailedFunctionsOnly,
632 hideInfoMessages,
633 hideSystemMessages):
634 self.__report = ReportConfig(directory,
635 name,
636 timestampTemplate,
637 appendTestCaseName,
638 appendTimestamp,
639 collapseFunctions,
640 showFailedFunctionsOnly,
641 hideInfoMessages,
642 hideSystemMessages)
643
645 return self.__report.directory
646
647
648 def getReportName (self):
649 return self.__report.name
650
651
653 return self.__report.timestampTemplate
654
655
657 return self.__report.appendTestCaseName
658
659
661 return self.__report.appendTimestamp
662
663
665 return self.__report.collapseFunctions
666
667
669 return self.__report.showFailedFunctionsOnly
670
671
673 return self.__report.hideInfoMessages
674
675
677 return self.__report.hideSystemMessages
678
679
688 return self.__usePythonCoverage
689
690
695 def setPythonCoverageEnabled (self, value):
696 self.__usePythonCoverage = True if value else False
697
698
700 self.__useGlobalPythonCoverage = True if value else False
701
702
704 return self.__useBullseyeCoverage
705
706
707 def setBullseyeCoverageEnabled (self, value):
708 self.__useBullseyeCoverage = True if value else False
709
710
712 return self.__mMLABRestartInterval
713
714
716 return self.__maxTestTimeoutSeconds
717
719 return self.__ipcConnectionTimeout
720
getBoolean(node, default, attributeName)
Definition Config.py:336
save(self, filename=None)
Save the configuration variables set to the file with the given name.
Definition Config.py:429
setTestCaseManagerOptions(self, shouldReloadPythonModulesWhenReloadingTestCases)
Definition Config.py:587
__init__(self, filePath=None, autoSave=True, isTestCaseManager=False)
Definition Config.py:101
fetchBullseyeCoverageSettings(self, coverageNode)
Definition Config.py:374
setMLABExecutablePath(self, executablePath)
Definition Config.py:597
fetchUsePythonCoverage(self, pythonCoverageNode)
Definition Config.py:392
findMLABExecutable(basePath, executableName, subPath)
Definition Config.py:526
storeTestCaseManagerSettings(self, xmlRoot)
Definition Config.py:363
getMLABTestCenterCommand(self, macroName)
Definition Config.py:591
fetchPythonCoverageExclusionExpressions(self, coverageNode)
Definition Config.py:403
fetchUseGlobalPythonCoverage(self, pythonCoverageNode)
Definition Config.py:397
fetchTestCaseManagerSettings(self, xmlRoot)
Definition Config.py:357
fetchUseBullseyeCoverage(self, bullseyeNode)
Definition Config.py:379
setReportOptions(self, directory, name, timestampTemplate, appendTestCaseName, appendTimestamp, collapseFunctions, showFailedFunctionsOnly, hideInfoMessages, hideSystemMessages)
Definition Config.py:633
getInteger(node, default, attributeName)
Definition Config.py:346
fetchPythonCoverageInclusionExpressions(self, coverageNode)
Definition Config.py:412
fetchPythonCoverageSettings(self, coverageNode)
Definition Config.py:384
__init__(self, directory=getReportDir(), name="Report", timestampTemplate="_%y_%m_%d__%H_%M", appendTestCaseName=False, appendTimestamp=False, collapseFunctions=False, showFailedFuctionsOnly=False, hideInfoMessages=False, hideSystemMessages=False)
Definition Config.py:87
getConfigFilePath(isTestCaseManager=False)
Definition Config.py:35
verifyConfiguration(cfgFile)
Definition Config.py:56