unittest2是python自带的一个单元测试框架。基本流程如下:
- 所以第一步我们直接导入unittest2包即可:import unittest2
- 创建一个类并继承unittest2代码库中的TestCase类,表示我们当前的类是一个测试用例类:class unittest2Demo(unittest2.TestCase)
- 声明一个以test开头的方法:def test_login(self):
- 以test开头表示这个方法是一个测试用例方法,该方法可以直接运行
- 普通的方法就不能直接运行,只有被调用才会执行
- 重写父类中的两个方法:
- setUp(): 在每条测试用例方法开始之前,要做的预置条件。
- tearDown(): 在每条测试用例方法结束后,要做的场景还原。
- 重写父类中的两个方法:
- setUpClass(): 在类中所有方法开始之前,要做的预置条件
- tearDownClass(): 在类中所有方法之后,要做的场景还原工作。
- 需要在方法上面添加装饰器@classmethod
- 在最后添加main方法:
- if__name__=='__main__':
- 如果在当前文件中右键运行,才会执行下面的语句
- 如果在其他文件中右键运行,下面的语句不能被调用和执行
- 调用unittest2.main()方法:表示调用unittest2的主方法,这样就会执行当前类中的所有方法。
- if__name__=='__main__':
- Note:
- 根据光标位置的不同,可以选择执行不同的测试用例。
- 测试用例的执行顺序取决于字母的排列顺序a-z
代码举例如下:
1 # unittest2是一个单元测试框架,接下来学习如何使用这个框架 2 # 导入包 3 import unittest2 4 5 # 创建类,并继承代码库中的TestCase,表示当前类是测试用例类 6 class Unittest2Demo(unittest2.TestCase): 7 def test_login(self): 8 print("登录") 9 self.func() 10 11 def func(self): 12 print("不以test开头的普通方法") 13 14 def test_register(self): 15 print("注册") 16 17 def test_aaa(self): 18 print("测试字母排列顺序") 19 20 def setUp(self): 21 print("setUp") 22 23 def tearDown(self): 24 print("tearDown") 25 26 @classmethod 27 def setUpClass(cls): 28 print("setUpClass") 29 30 @classmethod 31 def tearDownClass(cls): 32 print("tearDownClass") 33 34 if __name__ == '__main__': 35 unittest2.main()
将光标放在main方法那一行,运行结果如下:
1 setUpClass 2 setUp 3 测试字母排列顺序 4 tearDown 5 setUp 6 登录 7 不以test开头的普通方法 8 tearDown 9 setUp 10 注册 11 tearDown 12 tearDownClass 13 14 15 Ran 3 tests in 0.007s 16 17 OK 18 19 Process finished with exit code 0
分析结果:
- 一共创建了三个以test开头的测试方法以及一个普通方法,在直接调用的时候只有测试方法被调用。
- 以a开头的case被优先执行
- 每个case都会执行一遍setUp和tearDown。
- 在类中全部case开始和结束的时候执行setUpClass和tearDownClass.
- 调用setUp和tearDown,setUpClass和tearDownClass的时候和书写位置无关,只要声明就会在每个case调用之前执行。
进阶-封装重复代码:
- 创建一个父类BaseTestCase, 实现setUp和tearDown,setUpClass和setUpClass和tearDownClass方法
- 以后的测试用例继承这个父类,继承父类,就继承了父类的所有方法,就不需要再每个用例都重新写方法了。