您的位置:首页 > 产品设计 > UI/UE

Pyunit源码笔记之五 开始执行testsuit的run及迭代

2017-06-01 13:01 351 查看
在runner.py的 def run(self, test):

startTestRun()是所有testsuite执行之前的,目前没具体操作内容。

def run(self, test):
........
with warnings.catch_warnings():
if self.warnings:
........
.........
startTime = time.time()
startTestRun = getattr(result, 'startTestRun', None)
if startTestRun is not None:
startTestRun()
try:
test(result)
finally:
stopTestRun = getattr(result, 'stopTestRun', None)
if stopTestRun is not None:
stopTestRun()
stopTime = time.time()
test(result)的 test是testsuit, 执行suite.py中的__call__(self, *args, **kwds)

def __call__(self, *args, **kwds):
return self.run(*args, **kwds)


接着执行run(self, result, debug=False),

_isnotsuite(test)判断是否不为 testsuite, 如果是suite,中

def run(self, result, debug=False):
topLevel = False
if getattr(result, '_testRunEntered', False) is False:
result._testRunEntered = topLevel = True

for index, test in enumerate(self):
if result.shouldStop:
break

if _isnotsuite(test):
self._tearDownPreviousClass(test, result)
self._handleModuleFixture(test, result)
self._handleClassSetUp(test, result)
result._previousTestClass = test.__c
4000
lass__

if (getattr(test.__class__, '_classSetupFailed', False) or
getattr(result, '_moduleSetUpFailed', False)):
continue

if not debug:
test(result)
else:
test.debug()

if self._cleanup:
self._removeTestAtIndex(index)

if topLevel:
self._tearDownPreviousClass(None, result)
self._handleModuleTearDown(result)
result._testRunEntered = False
return result


for index, test in enumerate(self)第一次,test是testsuite,

<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<__main__.MyTest testMethod=testmul>, <__main__.MyTest testMethod=testsum>]>]>

到下面的test(result)时,递归继续调用这个run(),

提一下:_isnotsuite(test)判断是否不为 testsuite, 如果是suite,就忽略。

for index, test in enumerate(self)第二次,test还是testsuite, 再次递归。

<unittest.suite.TestSuite tests=[<__main__.MyTest testMethod=testmul>, <__main__.MyTest testMethod=testsum>]>

for index, test in enumerate(self)第三次,test就是testcase:、

testmul (__main__.MyTest)

testsum (__main__.MyTest)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: