在Python-异常处理try(一) 中最后我们提到过关于try-except-raise的内容,本篇博客,补充关于raise的一个知识点,Python-异常处理try(一) 的链接如下:
http://blog.csdn.net/weixin_39568072/article/details/78481563
想说一点是,当我们使用unittest结合HTMLTestRunner来输出自动化测试报告的额时候,有一点我给忽略了,当时用raise只是看到了它的一个好处,就是如果有异常,它会抛出异常,并且用例的执行结果会是error。
但是今天我在测试用例中写了一个循环,当循环中间某一个循环出现异常的时候,后面的循环就不会执行了,例如下代码的情况:
#encoding=utf-8
import unittest
import traceback
from HTMLTestRunner import HTMLTestRunner
class Raise(unittest.TestCase):
def setUp(self):
pass
def test01(self):
for i in range(10):
try:
self.assertEqual(i,1,'not equal')
except Exception,e:
raise e
else:
print 'i == 1'
def tearDown(self):
pass
if __name__=='__main__':
suite=unittest.TestSuite()
suite.addTest(Raise('test01'))
with open('HTMLReport.html','w')as fp:
runner=HTMLTestRunner(stream=fp,title='raise report',description='ajin report',verbosity=2)
runner.run(suite)
看,我这里的except是和raise联合使用的,我们来看一下报告:
我们看到,循环只执行了一次就停住了;
那么,代码改一下,我们再看:
#encoding=utf-8
import unittest
import traceback
from HTMLTestRunner import HTMLTestRunner
class Raise(unittest.TestCase):
def setUp(self):
pass
def test01(self):
for i in range(10):
try:
self.assertEqual(i,1,'not equal')
except Exception,e:
print traceback.format_exc()
else:
print 'i == 1'
def tearDown(self):
pass
if __name__=='__main__':
suite=unittest.TestSuite()
suite.addTest(Raise('test01'))
with open('HTMLReport.html','w')as fp:
runner=HTMLTestRunner(stream=fp,title='raise report',description='ajin report',verbosity=2)
runner.run(suite)
改动的地方就是把except中的raise变成了traceback.format_exc(),这样我们看一下报告:
下面还有其他的,就不截图了;
所以,我们可以看到,raise抛出异常后,后面的代码就强行停止了,所以,要是testCase中有循环的话,为了不使异常中断循环,我们要用except-traceback.format_exc(),这样既可以打印出来报错信息,也可以不中断循环!!!!
就是有一点要操心,计时testCase的try中捕获了异常,但是报告中的结果会显示pass,而不是error,所以看报告的时候要打开报告看一下详细信息,不要被执行结果欺骗!!