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

Posted #天羽Owl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python利用unittest测试框架组织测试用例的5种方法相关的知识,希望对你有一定的参考价值。

利用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种方法的主要内容,如果未能解决你的问题,请参考以下文章

Python自动化测试之详解Unittest单元测试框架

Python基础入门-unittest单元测试框架

python接口测试--unittest用例封装

python - 简述unittest框架

python+requests随笔:unittest框架

Python必会的单元测试框架 —— unittest