栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

系统学习Python——单元测试unittest:内置装饰器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

系统学习Python——单元测试unittest:内置装饰器

分类目录:《系统学习Python》总目录


在自动化测试过程中,我们可能会遇到这样的场景:在某些情况下,测试用例虽然不需要执行,但是我们又不愿意删掉它。下面来看看unittest提供的装饰器功能。

无条件跳过装饰器

下面的代码借助@unittest.skip('skip info')装饰器,演示无条件跳过执行某个方法:

import unittest


class MyTestClassOne(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print('setUpClass')

    def setUp(self):
        print('setUp')

    def test_001(self):
        print('test_first')
        self.assertEqual(0, 0)

    @unittest.skip('skip info')
    def test_002(self):
        print('test_second')
        self.assertEqual(0, 0)

    def test_003(self):
        print('test_third')
        self.assertEqual(0, 0)

    def test_004(self):
        print('test_fourth')
        self.assertEqual(0, 0)

    def tearDown(self):
        print('tearDown')

    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')

运行结果如下:

============================= test session starts =============================
collecting ... collected 4 items

testclass.py::MyTestClassOne::test_001 setUpClass
setUp
test_first
tearDown

testclass.py::MyTestClassOne::test_002 SKIPPED (skip info) 
Skipped: skip info

testclass.py::MyTestClassOne::test_003
setUp
test_third
tearDown

testclass.py::MyTestClassOne::test_004
setUp
test_fourth
tearDown
tearDownClass


======================== 3 passed, 1 skipped in 0.03s =========================

Process finished with exit code 0
满足条件跳过装饰器

下面的代码借助@unittest.skipIf(condition, 'info')装饰器,演示当满足某个条件时,跳过执行某个方法:

import unittest


class MyTestClassOne(unittest.TestCase):
    i = 10
    @classmethod
    def setUpClass(cls):
        print('setUpClass')

    def setUp(self):
        print('setUp')

    def test_001(self):
        print('test_first')
        self.assertEqual(0, 0)

    @unittest.skipIf(i > 1, 'info')
    def test_002(self):
        print('test_second')
        self.assertEqual(0, 0)

    def test_003(self):
        print('test_third')
        self.assertEqual(0, 0)

    def test_004(self):
        print('test_fourth')
        self.assertEqual(0, 0)

    def tearDown(self):
        print('tearDown')

    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')

if __name__ == '__main__':
    unittest.main()

因为变量i = 1,满足i > 0的条件,所以跳过执行test_002用例,运行结果如下:

============================= test session starts =============================
collecting ... collected 4 items

testclass.py::MyTestClassOne::test_001 setUpClass
PASSED                            [ 25%]setUp
test_first
tearDown

testclass.py::MyTestClassOne::test_002 SKIPPED (info)                    [ 50%]
Skipped: info

testclass.py::MyTestClassOne::test_003 PASSED                            [ 75%]setUp
test_third
tearDown

testclass.py::MyTestClassOne::test_004 PASSED                            [100%]setUp
test_fourth
tearDown
tearDownClass


======================== 3 passed, 1 skipped in 0.03s =========================

Process finished with exit code 0
不满足条件跳过

下面的代码借助@unittest.skipUnless(a==5,‘info’)装饰器,演示当不满足某个条件时,跳过执行某个方法。

import unittest


class MyTestClassOne(unittest.TestCase):
    i = -1
    @classmethod
    def setUpClass(cls):
        print('setUpClass')

    def setUp(self):
        print('setUp')
        self.i = 1

    def test_001(self):
        print('test_first')
        self.assertEqual(0, 0)


    def test_002(self):
        print('test_second')
        self.assertEqual(0, 0)


    def test_003(self):
        print('test_third')
        self.assertEqual(0, 0)

    @unittest.skipUnless(i > 0, 'info')
    def test_004(self):
        print('test_fourth')
        self.assertEqual(0, 0)

    def tearDown(self):
        print('tearDown')

    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')

if __name__ == '__main__':
    unittest.main()

因为i < 0不满足条件,所以跳过test_004用例,运行结果如下:

============================= test session starts =============================
collecting ... collected 4 items

testclass.py::MyTestClassOne::test_001 
testclass.py::MyTestClassOne::test_002 
testclass.py::MyTestClassOne::test_003 
testclass.py::MyTestClassOne::test_004 

======================== 3 passed, 1 skipped in 0.03s =========================

Process finished with exit code 0
setUpClass
setUp
test_first
tearDown
setUp
test_second
tearDown
setUp
test_third
tearDown
SKIPPED (info) 
Skipped: info
tearDownClass
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958905.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号