zoukankan      html  css  js  c++  java
  • selenium

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

    待测文件:

    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
  • 相关阅读:
    浅析Dagger2的使用
    Android消息机制源码分析
    EventBus3.0源码解析
    Android自定义控件(二)
    Android 自定义控件(一)
    Android IPC机制之ContentProvider
    Android IPC机制之Messenger
    Android IPC机制之AIDL
    Android网络请求框架
    Android常用设计模式(二)
  • 原文地址:https://www.cnblogs.com/xiaochongc/p/12591356.html
Copyright © 2011-2022 走看看