美文网首页开源优测赏味不足程序员
python unittest之加载及跳过测试方法和示例

python unittest之加载及跳过测试方法和示例

作者: 苦叶子 | 来源:发表于2017-04-13 08:58 被阅读1372次

    前言

    在python unittest框架中,内置了用例加载及跳过的标准函数。

    其加载用例通过TestLoader类实现,而跳过测试方法则通过unittest.skip()类实现。下面我们一起来学习下。

    TestLoader加载用例

    TestLoader类有一个discover()函数,简洁的实现了从指定顶层目录、模块等加载测试用例。

    将下述代码保存至==test==_disvover.py中

    # _*_ coding:utf-8 _*_
    
    __author__ = '苦叶子'
    
    import unittest
    import sys
    reload(sys)
    sys.setdefaultencoding("utf-8")
    
    
    # 被测函数
    def add(a, b):
        return a + b
        
    # 测试用例
    class demoTest(unittest.TestCase):
        
        def test_add_4_5(self):
            print u"测试 discover 命令"
            self.assertEquals(add(4,5),9)
            
    

    切换至==test==_disvover.py所在目录,在命令行中执行一下命令:

    python -m unittest discover
    

    执行结果如下:

    discover.png

    通过该命令,unittest测试框架会尝试在当前目录及其子目录加载所有满足要求的测试(==注意:所有的用例模块应该以test开头进行命名==,默认加载test开头的模块)

    下面我们一起看下其他相关的命令

    序号 命令选项 描述
    1 -v, --verbose 详细输出
    2 -s, --start-directory 启动目录(默认为当前目录)
    3 -p, --pattern 匹配加载的测试文件(默认匹配test*.py)
    4 -t, --top-level-directory 顶层目录(默认同--start-directory)

    例如我们指定C:\test下,匹配assert开头的所有测试模块

    python -m unittest -v -s "c:\\test" -p "assert*.py"
    

    这个命令将加载C:\test目录下所有assert开头的测试模块中的测试方法

    unittest.skip跳过测试方法

    python unittest测试框架从python2.7开始支持设置跳过指定的测试方法或是跳过满足某种条件的测试用例。

    下面我看一个强制跳过指定的测试用例的示例:

    # _*_ coding:utf-8 _*_
    
    __author__ = '苦叶子'
    
    import unittest
    import sys
    reload(sys)
    sys.setdefaultencoding("utf-8")
    
    # 被测函数
    def add(a, b):
        return a + b
    
    class demoSkipTest(unittest.TestCase):
        
        @unittest.skip(u"强制跳过示例")
        def test_add(self):
            self.assertEqual(add(4,5), 9)
            
        def test_add_2(self):
            self.skipTest("强制跳过示例2")
            self.assertEqual(add(4,5), 9)
    
    if __name__ == '__main__':
        unittest.main()
    

    将上述代码保存至demoskip.py,运行下述命令:

    python demoskip.py
    

    结果如下:

    demoskip.png

    下面我们一起看下各种skip方法说明

    序号 方法 说明
    1 unittest.skip(reason) 强制跳转。reason是跳转原因
    2 unittest.skipIf(condition, reason) 条件跳转,如果condition是True则跳转
    3 unittest.skipUnless(condition, reason) 除非conditioin为True,才进行调整
    4 unittest.expectedFailure() 标记该测试预期为失败 ,如果该测试方法运行失败,则该测试不算做失败

    下面我们一起看下各种方式实践的示例

    # _*_ coding:utf-8 _*_
    
    __author__ = '苦叶子'
    
    import unittest
    import sys
    reload(sys)
    sys.setdefaultencoding("utf-8")
    
    class demoSkipTest(unittest.TestCase):
        a = 50
        b = 20
        
        def test_add(self):
            """加法"""
            result = self.a + self.b
            self.assertEqual(result, 40)
        
        @unittest.skipIf(a>b, u"a>b就跳过")    
        def test_sub(self):
            """减法"""
            result = self.a - self.b
            self.assertTrue(result == -30)
            
        @unittest.skipUnless(b==0, u"除数为0,则跳转")
        def test_div(self):
            """除法"""
            result = self.a / self.b
            self.assertTrue(result == 1)
            
        @unittest.expectedFailure
        def test_mul(self):
            """乘法"""
            result = self.a * self.b
            self.assertTrue(result == 0)
            
    if __name__ == "__main__":
        unittest.main()
    

    将上述代码保存至demo_skip_test.py,运行结果如下

    allskip.png

    总结

    本次就用例加载及如何跳过某些测试方法或用例进行了分享,大家可以基于上述示例代码进行改造学习和实践。

    相关文章

      网友评论

        本文标题:python unittest之加载及跳过测试方法和示例

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