unittest框架
unittest介绍和使用
【 官方文档:https://docs.python.org/3/library/unittest.html 】
1) 简介
- unittest是python自带的一个单元测试框架 ;
- unittest中包含了一些对常规的测试用例体系的支持,包括:test fixture test case test suite test runner;
- fixture中包含两种 ,分别为setup() teardown() setUpClass() testDownClass() ,是一个脚手架;
- 如果
setUp()
成功运行,无论测试方法是否成功,都会运行tearDown()
,若setup发生异常,框架认为测试发生异常,case不会被运行;
【例子】
import unittest def sum(a, b): return a + b class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): print("setupclass") # 每个case开始前运行 def setUp(self): print("setup") def test_int(self): self.assertEqual(sum(1, 2), 3) def test_number(self): self.assertEqual(sum(100, 200), 300) # 每个case结束后运行 def tearDown(self): print("teardown") @classmethod def tearDownClass(cls): print("teatdownclass") if __name__ == '__main__': unittest.main()
#unittest.main()
提供了一个测试脚本的命令行接口。当在命令行运行该测试脚本,脚本按照特定格式输出 # 输出 setupclass setup teardown setup teardown teatdownclass2) pytest
2)测试套件 [将测试用例集合在一起]
import unittest def sum(a, b): return a + b class MyTestCase(unittest.TestCase): @classmethod def setUpClass(cls): print("setupclass") # 每个case开始前运行 def setUp(self): print("setup") def test_int(self): print("test_int") self.assertEqual(sum(1, 2), 3) def test_number(self): print("test_number") self.assertEqual(sum(100, 200), 300) # 每个case结束后运行 def tearDown(self): print("teardown") @classmethod def tearDownClass(cls): print("teatdownclass") if __name__ == '__main__': # unittest.main()
suit = unittest.TestSuite()
suit.addTest(MyTestCase("test_int"))
suit.addTest(MyTestCase("test_number"))
# 执行测试
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suit)
3)不将测试函数转化为testcase的子类,打包测试函数运行:
import unittest def test_Something(self): self.assertEqual(sum(1,2),3) unittest.FunctionTestCase(test_Something)
4)跳过测试(Unittest支持跳过单个测试方法甚至整个测试类)
@unittest.skip("reason") def test_int(self): print("test_int") self.assertEqual(sum(1, 2), 3)
# 当condition为真时,跳过; @unittest.skipIf(condition='a',reason='b')
# 跳过,除非条件为真; @unittest.skipUnless(condition='a',reason='b')
5)假设预计失败
# 把测试标记为预计失败。如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败。
@unittest.expectedFailure def test_number(self): print("test_number") self.assertEqual(sum(100, 200), 300)
* 被跳过的测试的 setUp()
和 tearDown()
不会被运行。
* 被跳过的类的 setUpClass()
和 tearDownClass()
不会被运行。
* 被跳过的模组的 setUpModule()
和 tearDownModule()
不会被运行。
6)断言常用方法
7)按顺序执行case
unittest框架默认根据ASCII码的顺序加载测试用例的,数字与字母的顺序为:“0-9”,“A-Z”,“a-z”。而想要用例按顺序执行,需要通过TestSuite类的addTest()方法按照一定的顺序来加载
8) 运行:python -m unittest test_demo.py 或是 python -m unittest -v test_demo.py (加上-v可以打印更详细的信息)
【导出报告】
*** 若有疑问,欢迎讨论,QQ群号:744419090 ***