pycharm中执行unitest断言只会执行光标所在的testcase

pycharm中执行unitest断言只会执行光标所在的testcase

在学习unittest测试用例执行时发现一个问题,光标在test01时只会执行test01测试用例,光标在__main__时才会执行所有的测试用例

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author:Richard_Kong
 4 """
 5 unitest的基本原理:
 6     unitest是python自带的测试框架
 7     unitest 是python的标准测试库
 8 四大组件:
 9     testcase:测试用例,方法命名基于test_开头,测试用例自行排序执行,排序规则A-Z,0-9
10     testfixture: 设置添置条件 setup ,后置条件 teardown,每个测试用例方法执行前后都要执行者两个方法
11     testsuit:测试套件,批量执行用例集,套件运行需要结合运行器 htmltestrunner/testtestrunner
12     test runner :运行器,通过test的run方法去调用执行测试用例集
13 unitest的语法规则:
14 用import unitest导入unitest模块
15 定义一个集成unittest.TestCase的测试用例类,如class XXX(unitest.TestCase)
16 即如果定义了则会在每个测试case执行前先执行setup方法,执行完毕后执行teardown方法
17 用例名 必须以test开头,否则unitest不能识别
18 一个测试用例应该只测试一个方面,测试的目的和测试内容应该很明确,主要是调用seertEqual\assertRaises等断言方法来
19 判断程序执行结果和预期值是否相符合
20 调用unnitest.main()启动测试
21 """
22 import unittest
23 import parameterized
24 
25 def sum(a,b):
26     return a+b
27 
28 
29 def setUpModule():
30     print("setUpModule 函数被调用")
31 
32 
33 def tearDownModule():
34     print("tearDownModule函数被调用")
35 
36 
37 class test01(unittest.TestCase):
38     @classmethod
39     def setUpClass(cls) -> None:
40         print("类方法setUpClass 被调用了")
41     @classmethod
42     def tearDownClass(cls) -> None:
43         print("类方法 tearDown 被调用了")
44 
45     def setUp(self):
46         print("befor test the setUp function 被调用了")
47 
48     def tearDown(self):
49         print("after test the teardown function 被调用了")
50 
51     def test_01(self):
52         print("in function test 01")
53 
54     def test_02(self):
55         print("in function test 02")
56 
57     def test_03(self):
58         num3 = sum(1,8)
59         self.assertIn(num3,[1,2,3,4,7,8])
60 
61     def test_04(self):
62         num = sum(6,9)
63         self.assertEqual(num,15)
64     # def test_05(self):
65     #     print(sum("aaa",9))
66 
67 
68 if __name__ == '__main__':
69     unittest.main()

这种执行方式依赖pycharm环境,原因是unitest是集成pycharm开发环境的,这个是程序入口的问题,当光标在testcase01上程序运行的入口在testcase01,所以会出现这种情况,当光标放在入口函数__main__的时候就会执行unittest.main()函数,后续使用test_suite管理测试用例集后就不会出现这个问题了

posted @ 2021-08-03 15:05  GalaxyStar  阅读(138)  评论(0)    收藏  举报