在前两篇博客中,我们对python自动化初步进行了学习,在其中我们发现测试用例有别于正式开发。对于检测输出结果,一般以断言这种形式进行检验,断言按照定义来可以分为三个部分,下面进行总结。
往期/后续:
目录
常用断言汇总
0.准备函数
在java中的单元测试中,相比大家很熟悉那几个经典的测试函数,没错就是加减乘除,在这里使用python语言对其进行重新编写作为测试函数。
import logging
mylogger = logging.Logger("TestToBeTest")
class ToBeTest(object):
@classmethod
def sum(cls, a, b):
return a + b
@classmethod
def div(cls, a, b):
return a / b
@classmethod
def return_none(cls):
return None
1.用来判断被测试的方法
class TestToBeTest(unittest.TestCase):
def test_assertequal(self):
try:
a, b = 100, 200
sum = 300
self.assertEqual(a+b, sum, '断言失败, %s+%s != %s'%(a, b, sum))
except AssertionError as e:
print(e)
def test_assertnotequal(self):
try:
a, b = 100, 200
res = -1000
self.assertNotEqual(a-b, res, '断言失败, %s+%s != %s' % (a, b, res))
except AssertionError as e:
print(e)
if __name__ == '__main__':
unittest.main()
这里用到的断言方法是表格中的前两个,我们可以看见如下图所示的运行结果,测试结果都是正确的。
2.用来判断在某种情况下是否会抛出特定的异常
值得注意的,抛出特定的异常是判断成功。
class TestToBeTest(unittest.TestCase):
def test_assertraises(self):
with self.assertRaises(TypeError) as exc:
random.sample([1, 2, 3, 4, 5, 6])
print(exc.exception)
try:
self.assertRaises(ZeroDivisionError, ToBeTest.div, 3, 0)
except ZeroDivisionError as e:
print(e)
if __name__ == '__main__':
unittest.main()
3.判断日志是否包含应有信息
def test_assertlogs(self):
with self.assertLogs(mylogger) as log:
mylogger.error("打开浏览器")
mylogger.error("关闭浏览器")
self.assertEqual(log.output, ['ERROR:TestToBeTest:打开浏览', 'ERROR:TestToBeTest:关闭浏览器'])
这里我们可以清晰的看见,上述函数在定义的时候,将待检测的日志信息写为“打开浏览”与真实的记录少一个值,所以报错。(额,这个在工程中是后面检测前面哈)