码迷,mamicode.com
首页 > 编程语言 > 详细

python利用unittest测试框架组织测试用例的5种方法

时间:2018-01-13 22:16:23      阅读:400      评论:0      收藏:0      [点我收藏+]

标签:传递   框架   class   编写测试用例   default   erb   sep   result   methods   

利用unittest测试框架可以编写测试用例,执行方式分两大类:利用main方法和利用testsuite,其中利用测试套件来组织测试用例可以有4种写法。

在此之前,先了解几个概念

  • TestCase:所有测试用例的基本类,给一个测试方法的名字,就会返回一个测试用例实例;
  •  TestSuite:组织测试用例的实例,支持测试用例的添加和删除,最终将传递给  testRunner进行测试执行;
  •  TextTestRunner:进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息;
  •  TestLoader:用来加载TestCase到TestSuite中的,其中有几个  loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例;
  • defaultTestLoader.discover:将discover方法筛选出来的用例,循环添加到测试套件中,打印出的用例信息会递增

 

方法一:通过unittest.main()来执行测试用例的方式

import unittest

class TestStringMethods(unittest.TestCase):
    
    def setUp(self):
        unittest.TestCase.setUp(self)
        
    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test_upper(self):
        self.assertEqual(foo.upper(), FOO)
        
    def test_isupper(self):
        self.assertTrue(FOO.isupper())
        self.assertFalse(Foo.isupper())
        
    def test_split(self):
        s = hello world
        self.assertEqual(s.split(), [hello,world])
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == "__main__":
    #import sys;sys.argv = [‘‘, ‘Test.testName‘]
     unittest.main()

unittest.main()会去查找所有以test开头的方法,并把它们当做一个个测试用例

 

方法二:用测试套件

import unittest

class TestStringMethods(unittest.TestCase):
    
    def setUp(self):
        unittest.TestCase.setUp(self)
        
    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test_upper(self):
        self.assertEqual(foo.upper(), FOO)
        
    def test_isupper(self):
        self.assertTrue(FOO.isupper())
        self.assertFalse(Foo.isupper())
        
    def test_split(self):
        s = hello world
        self.assertEqual(s.split(), [hello,world])
        with self.assertRaises(TypeError):
            s.split(2)
    
def suite():
    
    suite = unittest.TestSuite()
    suite.addTest(TestStringMethods(test_upper))
    suite.addTest(TestStringMethods(test_isupper))
    unittest.TextTestRunner(verbosity=2).run(suite)
    
if __name__ == "__main__":
    
    suite()
    #import sys;sys.argv = [‘‘, ‘Test.testName‘]
#     unittest.main()

 

方法三:用TestLoader

import unittest 
class TestCase1(unittest.TestCase):
    #def setUp(self):
    #def tearDown(self):
    def testCase1(self):
        print aaa      
    def testCase2(self):
        print bbb
  
class TestCase2(unittest.TestCase):
    #def setUp(self):
    #def tearDown(self):
    def testCase1(self):
        print aaa1  
    def testCase2(self):
        print bbb1
        
if __name__ == "__main__":
    #此用法可以同时测试多个类
    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1) 
    suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2) 
    suite = unittest.TestSuite([suite1, suite2]) 
    unittest.TextTestRunner(verbosity=2).run(suite)

 

方法四:测试套件的一种变性,和方法二差不多

import unittest

class TestStringMethods(unittest.TestCase):
    
    def setUp(self):
        unittest.TestCase.setUp(self)
        
    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test_upper(self):
        self.assertEqual(foo.upper(), FOO)
        
    def test_isupper(self):
        self.assertTrue(FOO.isupper())
        self.assertFalse(Foo.isupper())
        
    def test_split(self):
        s = hello world
        self.assertEqual(s.split(), [hello,world])
        with self.assertRaises(TypeError):
            s.split(2)
    
def suite():
  
     tests = [test_upper,test_isupper]
     suite = unittest.TestSuite(map(TestStringMethods,tests))
     unittest.TextTestRunner(verbosity=2).run(suite)
    

if __name__ == "__main__":
    
    suite()
    #import sys;sys.argv = [‘‘, ‘Test.testName‘]
#     unittest.main()

 

方法五:用discover

import unittest

class TestStringMethods(unittest.TestCase):
    
    def setUp(self):
        unittest.TestCase.setUp(self)
        
    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test_upper(self):
        self.assertEqual(foo.upper(), FOO)
        
    def test_isupper(self):
        self.assertTrue(FOO.isupper())
        self.assertFalse(Foo.isupper())
        
    def test_split(self):
        s = hello world
        self.assertEqual(s.split(), [hello,world])
        with self.assertRaises(TypeError):
            s.split(2)
    
def suite():

     suite=unittest.TestSuite()
     discover=unittest.defaultTestLoader.discover(casepath, pattern=test_*.py, top_level_dir=None)
     #将discover方法筛选出来的用例,循环添加到测试套件中,打印出的用例信息会递增
     for test_case in discover:
             suite.addTests(test_case)           
     print(suite)         
     return suite

if __name__ == "__main__":
    
    all_test_cases = suite()
    unittest.TextTestRunner().run(all_test_cases)
    #import sys;sys.argv = [‘‘, ‘Test.testName‘]
#     unittest.main()

 

python利用unittest测试框架组织测试用例的5种方法

标签:传递   框架   class   编写测试用例   default   erb   sep   result   methods   

原文地址:https://www.cnblogs.com/mgzc-1508873480/p/8280451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!