首页 > 其他 > 详细

selenium - unittest单元测试用例的组织

时间:2020-03-29 13:19:17      阅读:59      评论:0      收藏:0      [点我收藏+]

本文按照循序渐进的方法介绍测试用例的组织方式,实际工作中,可以借鉴方法三

 

待测文件:

calculate.py文件
1
# 计算器类 2 class Count: 3 def __init__(self, a, b): 4 self.a = a 5 self.b = b 6 7 # 计算加法 8 def add(self): 9 return self.a + self.b 10 11 # 计算减法 12 def sub(self): 13 return self.a - self.b

 

测试文件:

方法一:直接创建测试类,进行对应功能的测试

 1 from calculate import Count
 2 import unittest
 3 
 4 class TestAdd(unittest.TestCase):   # 创建TestAdd类,测试add()功能
 5     def setUp(self):
 6         print(test add start------------)
 7 
 8     def tearDown(self):
 9         print(test add end--------------)
10 
11     def test_add_1(self):
12         print(add 1)
13         self.assertEqual(Count(2, 4).add(), 6)
14 
15     def test_add_2(self):
16         print(add 2)
17         self.assertEqual(Count(200, 400).add(), 600)
18 
19 class TestSub(unittest.TestCase):    # 创建TestSub类,测试sub()功能
20     def setUp(self):
21         print(test sub start------------)
22 
23     def tearDown(self):
24         print(test sub end--------------)
25 
26     def test_sub_1(self):
27         print(sub 1)
28         self.assertEqual(Count(2, 4).sub(), -2)
29 
30     def test_sub_2(self):
31         print(sub 1)
32         self.assertEqual(Count(200, 400).sub(), -200)
33 
34 
35 if __name__ == __main__:
36     # 构造测试集
37     suite = unittest.TestSuite()
38     suite.addTest(TestAdd(test_add_1))
39     suite.addTest(TestAdd(test_add_2))
40     suite.addTest(TestSub(test_sub_1))
41     suite.addTest(TestSub(test_sub_2))
42 
43     # 运行测试集合
44     runner = unittest.TextTestRunner()
45     runner.run(suite)

setUp()和tearDown()方法作用于每个测试用例的开始与结束,执行结果如下:

test add start------------
add 1
test add end--------------
test add start------------
add 2
test add end--------------
test sub start------------
sub 1
test sub end--------------
test sub start------------
sub 2
test sub end--------------


Ran 4 tests in 0.008s

OK

 

方法二:将共同的setUp()和tearDown()提取出来

如果每个类中的setUp()和tearDown()所做的事情都是一样的,就可以封装一个自己的测试类,如下:

将注意力放在具体测试用例的编写上,无须关注setUp()和tearDown()所做的事情

 1 from calculate import Count
 2 import unittest
 3 
 4 class MyTest(unittest.TestCase):  # 封装自己的测试类,继承TestCase类
 5     def setUp(self):
 6         print(test start------------)
 7 
 8     def tearDown(self):
 9         print(test end--------------)
10 
11 class TestAdd(MyTest):   # 继承MyTest类
12     def test_add_1(self):
13         print(add 1)
14         self.assertEqual(Count(2, 4).add(), 6)
15 
16     def test_add_2(self):
17         print(add 2)
18         self.assertEqual(Count(200, 400).add(), 600)
19 
20 class TestSub(MyTest):   # 继承MyTest类
21     def test_sub_1(self):
22         print(sub 1)
23         self.assertEqual(Count(2, 4).sub(), -2)
24 
25     def test_sub_2(self):
26         print(sub 2)
27         self.assertEqual(Count(200, 400).sub(), -200)
28 
29 
30 if __name__ == __main__:
31     # 构造测试集
32     suite = unittest.TestSuite()
33     suite.addTest(TestAdd(test_add_1))
34     suite.addTest(TestAdd(test_add_2))
35     suite.addTest(TestSub(test_sub_1))
36     suite.addTest(TestSub(test_sub_2))
37 
38     # 运行测试集合
39     runner = unittest.TextTestRunner()
40     runner.run(suite)

 

方法三:将不同功能的测试用例,分散到不同的测试文件中

随着软件功能的不断增加,对应的测试用例,也会呈指数级增长。如果测试用例达到上百个,把所有测试用例都写在一个测试文件中,那么这个文件会越来越臃肿,后期维护也比较麻烦。需要将这些用例,按照所测试的功能进行拆分,分散到不同的测试文件中。

不仅可以分散到不同的文件,甚至可以分散到不同的测试目录中,测试文件中还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,整体结构更加清晰。

上例中,拆分后的目录结构如下:

技术分享图片

 实现代码如下:

 testadd.py
1
from testpro.calculate import Count 2 import unittest 3 4 class TestAdd(unittest.TestCase): 5 def setUp(self): 6 print(add start) 7 8 def test_add_1(self): 9 print(add 1) 10 self.assertEqual(Count(2, 4).add(), 6) 11 12 def test_add_2(self): 13 print(add 2) 14 self.assertEqual(Count(1, 2).add(), 3) 15 16 def tearDown(self): 17 print(add end) 18 19 20 if __name__ == __main__: 21 unittest.main()
 testsub.py
1
from testpro.calculate import Count 2 import unittest 3 4 class TestSub(unittest.TestCase): 5 def setUp(self): 6 print(sub start) 7 8 def test_sub_1(self): 9 print(sub 1) 10 self.assertEqual(Count(2, 4).sub(), -2) 11 12 def test_sub_2(self): 13 print(sub 2) 14 self.assertEqual(Count(1, 2).sub(), -1) 15 16 def tearDown(self): 17 print(sub end) 18 19 20 if __name__ == __main__: 21 unittest.main()
 runtest.py
1
from testpro.testadd import TestAdd 2 from testpro.testsub import TestSub 3 import unittest 4 5 6 if __name__ == __main__: 7 suite = unittest.TestSuite() 8 suite.addTest(TestAdd("test_add_1")) 9 suite.addTest(TestAdd("test_add_2")) 10 suite.addTest(TestSub("test_sub_1")) 11 suite.addTest(TestSub("test_sub_2")) 12 13 runner = unittest.TextTestRunner() 14 runner.run(suite)

执行结果如下:

add start
add 1
add end
add start
add 2
add end
sub start
sub 1
sub end
sub start
sub 2
sub end
....
----------------------------------------------------------------------
Ran 4 tests in 0.001s

OK

 

selenium - unittest单元测试用例的组织

原文:https://www.cnblogs.com/xiaochongc/p/12591356.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!