美文网首页开源优测程序员AutoTest-AutoAI
python unittest之关键API说明及示例

python unittest之关键API说明及示例

作者: 苦叶子 | 来源:发表于2017-04-10 10:59 被阅读1286次

    前言

    本次就python unittest单元测试框架的一些基本的、常用的API 进行分享,以便大家后续更深入的熟悉和应用unittest。

    TestCase类API

    TeseCase类实例化的对象是最小的可测单元颗粒。它维护着一组测试方法以及为测试方法所提供的初始化方法和清理方法。

    下面我们一起看一下定义在TestCase类中常用的方法

    1. setUp()

    初始化函数,在所有的测试方法调用之前调用(自动调用)

    1. tearDown()

    清理函数,在所有的测试方法调用之后调用(自动调用)

    1. setUpClass()

    类初始化方法,在单个类中的所有测试方法调用之前调用

    1. tearDownClass()

    类清理方法,在单个类中的所有测试方法调用之后调用

    1. run(result=None)

    运行测试,并返回测试结果(返回值为对象)

    1. skipTest(reason)

    在测试方法或setUp调用该方法可跳过当前测试

    1. debug()

    以不采集测试结果方式运行测试

    1. shortDescription()

    返回一行描述的测试结果信息

    TestSuite类API

    在python unittest中,提供了一套非常不错的用例组织机制(TestSuite):用来组织系列TestCase构建测试套件。

    下面一起看看如何一步步的创建套件并运行它

    1. 创建TestSuite实例对象
    suite = unittest.TestSuite()
    
    1. 添加TestCase对象至套件中
    suite.addTest(testcase class)
    
    1. 添加TestCase对象至套件中方法2
    suite = unittest.makeSuite(testcase class)
    
    1. 添加测试方法至套件中
    suite.addTest(testcaseclass("testmethod"))
    
    1. 使用TextTestRunner创建一个运行器
    runner = unittest.TextTestRunner()
    
    1. 运行
    runner.run(suite)
    

    下面看看TestSuite类的API说明,以便进一步理解上述过程的细节。

    1. addTest()

    新增一个测试方法到套件中

    1. addTests()

    新增多个测试方法到套件中

    1. run()

    运行套件中关联的测试方法,并返回测试结果(返回值为测试结果对象)

    1. debug()

    运行套件中关联的测试方法,但不搜集测试结果

    1. countTestCases()

    返回当前测试对象的测试方法数

    TestSuite应用示例

    下面我用看一个TestSuite应用基本示例

    # _*_ coding:utf-8 _*_
    
    __author__ = '苦叶子'
    
    import unittest
    import sys
    reload(sys)
    sys.setdefaultencoding("utf-8")
    
    
    class suiteTest(unittest.TestCase):
        def setUp(self):
            self.a = 10
            self.b = 20
            
        def testadd(self):
            # 验证加法
            result = self.a + self.b
            self.assertTrue(result == 100)
            
        def testsub(self):
            # 验证减法
            result = self.a - self.b
            self.assertTrue(result == -10)
    
            
    # 定义suite
    def suite():
        suite = unittest.TestSuite()
        
        # 添加测试方法
        suite.addTest(suiteTest("testadd"))
        suite.addTest(suiteTest("testsub"))
        
        ## 或用以下方式添加测试方法
        # suite.addTest(unittest.makeSuite(suiteTest))
        
        return suite
        
    
    if __name__ == '__main__':
        runner = unittest.TextTestRunner()
        test_suite = suite()
        runner.run(test_suite)
    

    将上述代码保存至test_suite.py中,在命令行中执行下属命令,运行

    python test_suite.py
    

    结果如下图:

    testsuite.png

    TestLoader类API

    TestLoader类提供了从类或模块级别来创建test suites的能力。

    下面我们看一下简单的代码示例:

    # _*_ coding:utf-8 _*_
    
    __author__ = '苦叶子'
    
    import unittest
    import sys
    reload(sys)
    sys.setdefaultencoding("utf-8")
    
    # 测试用例1 
    class demo1Test(unittest.TestCase):
        def setUp(self):
            self.a = 10
            self.b = 20
            
        def testadd(self):
            # 验证加法
            result = self.a + self.b
            self.assertTrue(result == 100)
            
        def testsub(self):
            # 验证减法
            result = self.a - self.b
            self.assertTrue(result == -10)
    
    # 测试用例2        
    class demo2Test(unittest.TestCase):
        def setUp(self):
            self.a = 1
            self.b = 2
            
        def testadd(self):
            # 验证加法
            result = self.a + self.b
            self.assertTrue(result == 10)
            
        def testsub(self):
            # 验证减法
            result = self.a - self.b
            self.assertTrue(result == -1)        
    
    if __name__ == '__main__':
        # 用例列表
        testlist = [demo1Test, demo2Test]
        testload = unittest.TestLoader()
        
        # 构建test suite
        test_Suite = []
        for testcase in testlist:
            testSuite = testload.loadTestsFromTestCase(testcase)
            test_Suite.append(testSuite)
        newSuite = unittest.TestSuite(test_Suite)
        
        # 运行测试
        runner = unittest.TextTestRunner()
        runner.run(newSuite)
    

    其他方式说明,这里就不一一示例说明了。

    1. loadTestsFromTestCase()

    从指定的TestCase构建一个TestSuite对象,该对象包含了TestCase中所有的测试方法

    1. loadTestsFromModule()

    从指定的模块中构建一个TestSuite对象,该对象包含了模块中所有的测试方法

    注: 模块,一个个的.py文件,这些.py文件里有一个个继承至unittest.TestCase的类

    1. loadTestsFromName()

    从特定的字符串构建一个TestSuite对象

    1. discover()

    从指定目录,并递归其子目录,查找所有的测试模块,构建TestSuite。

    TestResult类

    在unittest中通过该类提供了测试结果信息。下面对TestResult的一些常用方法进行说明。

    1. Errors

    返回所有的因异常抛出导致的错误信息

    1. Failures

    返回所有的因断言失败的信息

    1. Skipped

    返回所有因某些原因导致跳过的测试信息

    1. wasSuccessful()

    如果所有测试都passed则返回True,否则返回False

    1. stop()

    取消所有正在执行的测试

    1. startTestRun()/stopTestRun()

    自己去尝试下_

    1. testsRun

    返回截止至当前的执行数

    1. Buffer

    如果设置为True, 控制stdout/stderr信息是否缓存

    这里就不写示例,请直接参考标准文档

    总结

    本次就unittest中的TestCase、TestSuite、TestResult、TestLoader关键类进行了分享,并展示了关键使用实例。

    相关文章

      网友评论

        本文标题:python unittest之关键API说明及示例

        本文链接:https://www.haomeiwen.com/subject/lkbhattx.html