unittest2是python自带的一个单元测试框架。基本流程如下:

  1. 所以第一步我们直接导入unittest2包即可:import unittest2
  2. 创建一个类并继承unittest2代码库中的TestCase类,表示我们当前的类是一个测试用例类:class unittest2Demo(unittest2.TestCase)
  3. 声明一个以test开头的方法:def test_login(self):
    • 以test开头表示这个方法是一个测试用例方法,该方法可以直接运行
    • 普通的方法就不能直接运行,只有被调用才会执行
  4. 重写父类中的两个方法:
    • setUp(): 在每条测试用例方法开始之前,要做的预置条件。
    • tearDown(): 在每条测试用例方法结束后,要做的场景还原。
  5. 重写父类中的两个方法:
    • setUpClass(): 在类中所有方法开始之前,要做的预置条件
    • tearDownClass(): 在类中所有方法之后,要做的场景还原工作。
    • 需要在方法上面添加装饰器@classmethod
  6. 在最后添加main方法:
    • if__name__=='__main__': 
      • 如果在当前文件中右键运行,才会执行下面的语句
      • 如果在其他文件中右键运行,下面的语句不能被调用和执行
    • 调用unittest2.main()方法:表示调用unittest2的主方法,这样就会执行当前类中的所有方法。
  7. 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

 分析结果:

  1. 一共创建了三个以test开头的测试方法以及一个普通方法,在直接调用的时候只有测试方法被调用。
  2. 以a开头的case被优先执行
  3. 每个case都会执行一遍setUp和tearDown。
  4. 在类中全部case开始和结束的时候执行setUpClass和tearDownClass.
  5. 调用setUp和tearDown,setUpClass和tearDownClass的时候和书写位置无关,只要声明就会在每个case调用之前执行。

进阶-封装重复代码:

  1. 创建一个父类BaseTestCase, 实现setUp和tearDown,setUpClass和setUpClass和tearDownClass方法
  2. 以后的测试用例继承这个父类,继承父类,就继承了父类的所有方法,就不需要再每个用例都重新写方法了。