断言使用我们可以直接在测试用例里面添加unittest框架自带的断言(也就相当于判断),断言方法提供了测试结果是True还是False,所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回;如果断言失败
我们可以直接在测试用例里面添加unittest框架自带的断言(也就相当于判断),断言方法提供了测试结果是True还是False,所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回;
如果断言失败则抛出一个AssertionError,并标识该测试为失败状态;如果成功,则标识该测试为成功状态;如果异常,则当做错误来处理;
先来看一个实例,在一个测试类MyTestCase中添加多个测试方法和断言
from unittest import TestCase, main, skipclass MyTestCase(TestCase): def setUp(self): print('setUp') def tearDown(self): print('tearDown') def test_print1(self): print('第一个测试用例') # unittest框架自带的断言,如果不相等,直接抛出异常,相等什么都不做 self.assertEqual(200, 200, '测试失败') def test_print2(self): print('第二个测试用例') def test_print3(self): print('第三个测试用例')if __name__ == '__main__': main()========输出========:setUp第一个测试用例tearDownsetUp第二个测试用例tearDownsetUp第三个测试用例tearDown
这里有三个测试用例,每个测试用例开始之前都先执行了setUp方法,每个测试用例之后都执行了tearDown方法。如果我们想要忽略某个测试用例不执行,要怎么做?比如忽略第三个测试用例,只需要在第三个测试用例之前加上skip装饰器:
@skip('do not need test_print3') def test_print3(self): print('第三个测试用例')
我们可以使用unitest.skip装饰器跳过不需要的测试用例,@unittest.skip(reason)
表示无条件跳过测试用例,reason是用来说明原因的;
@unittest.skipIf(conditition,reason)
:condititon为true时跳过测试用例;
@unittest.skipunless(condition,reason)
:condition为False时跳过测试用例;
之前我们学习了setup方法和setUpClass方法,会在每个测试用例的前后都执行一遍,那如果我们只想要在所有测试用例的前后执行一遍,也就是在整个类中只执行一遍要怎么办呢,我们可以使用setUpClass方法和tearDownClass方法:
from unittest import TestCase, main, skipclass MyTestCase(TestCase): @claSSMethod def setUpClass(cls): print('setUpClass') @classmethod def tearDownClass(cls): print('tearDownClass') def test_print1(self): print('第一个测试用例') # unittest框架自带的断言,如果不相等,直接抛出异常,相等什么都不做 self.assertEqual(200, 200, '测试失败') def test_print2(self): print('第二个测试用例') @skip('do not need test_print3') def test_print3(self): print('第三个测试用例')if __name__ == '__main__': main()==========输出===========setUpClass第一个测试用例第二个测试用例tearDownClass
setup方法和teardown方法在每次执行一个测试用例时都会重新执行一遍,所以要想在整个类中只执行一遍可以用setUpClass和tearDownClass方法;
setUpClass
:需要添加@classmethod 装饰器,在一个类中只会在所有测试用例运行前调用一次;
tearDownClass
:需要添加@classmethod 装饰器,在所有测试用例运行后调用一次;
unittest.TestSuite类
创建测试套件,然后使用这个类的addTest() 方法将需要被测试的测试用例添加到测试套件中,最后使用unittest.TextTestRunner类
中的run()方法来运行suite所组装的测试用例;from unittest import TestCasefrom unittest import skipfrom unittest import main as main_methodclass MyTestCase(TestCase): @classmethod def setUpClass(cls): print('setUpClass') @classmethod def tearDownClass(cls): print('tearDownClass') def test_print1(self): print('第一个测试用例') self.assertEqual(200, 200, '测试失败') def test_print2(self): print('第一个测试用例') @skip('do not need test_print3') def test_print3(self): print('第一个测试用例')if __name__ == '__main__': main_method()
from test1 import MyTestCasefrom unittest import TestSuite, TextTestRunnersuite = TestSuite()# 在测试用例集中添加测试用例, 只添加两个测试的方法suite.addTest(MyTestCase('test_print1'))suite.addTest(MyTestCase('test_print3'))if __name__ == '__main__': # 创建测试runner,执行测试用例集 runner = TextTestRunner() runner.run(suite)=========输出=============setUpClass第一个测试用例tearDownClass
我们运行这段代码,只有第一个测试用例输出,因为我们只将第一个和第三个测试用例加入到测试集中,所有第二个测试用例不会执行,而我们在第三个测试用例前面机上了skip装饰器会跳过此测试用例,所有第三个也不会执行啦。
def add(x, y): return x + ydef sub(x, y): return x - y
from unittest import TestCasefrom unittest import skipfrom unittest import main as main_methodfrom add_sub import add, subclass MyTestCase(TestCase): @classmethod def setUpClass(cls): print('setUpClass') @classmethod def tearDownClass(cls): print('tearDownClass') def test_print1(self): ret = 1 + 2 result = add(1, 2) self.assertEqual(result, ret, 'test_print1测试失败') def test_print2(self): print('第二个测试用例') @skip('do not need test_print3') def test_print3(self): print('第三个测试用例')if __name__ == '__main__': main_method()
from test import MyTestCasefrom unittest import TestSuite, TextTestRunnersuite = TestSuite()# 在测试用例集中添加测试用例suite.addTest(MyTestCase('test_print1'))suite.addTest(MyTestCase('test_print2'))suite.addTest(MyTestCase('test_print3'))if __name__ == '__main__': # 创建测试runner,执行测试用例集 runner = TextTestRunner() runner.run(suite)========输出=========setUpClass第一个测试用例第二个测试用例tearDownClass
--结束END--
本文标题: unittest断言的使用
本文链接: https://www.lsjlt.com/news/229094.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0