python:unittest基础介绍、断言函数、跳过用例执行

2019-03-02  本文已影响0人  rr1990

一、介绍

  1. unittest模块是python进行单元测试的框架;
  2. unittest的概念:
  1. 使用方法
  1. unittest常用工作流程:
    TestLoader将测试用例TestCase添加到TestSuite中,TextTestRunner调用TestSuite的run方法,按测试用例的函数名ASCII的排列顺序依次执行用例,最后获得测试结果TestResult。
    执行TestCase的过程:先执行setUp()方法,若执行成功,则继续执行测试用例函数,无论测试用例是否执行成功均会执行tearDown()方法;若setUp()方法执行失败,则整个测试项目执行失败;

  2. 断言的使用
    使用assert*方法来检查测试结果,若assert检查失败,则抛出异常,unittest将其作为一个失败用例(即类型为failure); 非assert导致的异常,unittest会将其作为一个错误(即类型为error)。
    failure一般表示实际结果与预期结果不一致,表示测试用例执行失败;
    error一般表示测试代码有bug;

二、setUp、tearDown与setUpClass、tearDownClass操作

  1. setUp与tearDown操作:
  1. setUpClass与tearDownClass操作:
class Sample1(unittest.TestCase):
    def setUp(self):
        print("start")

    def tearDown(self):
        print("end")

    def testAdd(self):
        self.assertEqual(2 + 3, 5)

    def testReduce(self):
        self.assertEqual(7 - 5, 2)

if __name__ == '__main__':
    unittest.main()
"""结果
..
start
end
start
end
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK

"""
class Sample2(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("start")

    @classmethod
    def tearDownClass(cls):
        print("end")

    def testAdd(self):
        self.assertEqual(2 + 3, 5)

    def testReduce(self):
        self.assertEqual(7 - 5, 2)

if __name__ == '__main__':
    unittest.main()
"""结果
..
start
end
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
"""

三、断言函数介绍

unittest.TestCase自带的有多种断言函数的方法,可用来判断自动化测试的结果是否正确。

import unittest

class Assertion(unittest.TestCase):
    """断言函数的使用"""
    def setUp(self):
        self.driver = "0123456789ABC"

        def test_01(self):
        """测试用例"""
        # 判断两值是否相等
        self.assertEqual("0123456789ABC", self.driver, msg="设备相同")
        # 判断两值是否约等于
        self.assertAlmostEqual(3.141, 3.145, places=2)
        self.assertAlmostEqual(3.15, 3.17, delta=0.03)

    def tearDown(self):
        pass

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

四、忽略测试用例操作

可通过unittest.skip装饰器跳过测试用例或测试类

import unittest

test_version = (0, 1, 2, 3)

class SkipTestCase(unittest.TestCase):
    """忽略测试用例方法"""
    @classmethod
    def setUpClass(cls):
        print("start")

    @classmethod
    def tearDownClass(cls):
        print("end")

    def test_01(self):
        print("test1")

    @unittest.skip('skipping when demo is running')
    def test_02(self):
        """程序运行时无条件跳过此条用例"""
        print("test2")

    @unittest.skipIf(test_version < (5,), "test condition don't support")
    def test_03(self):
        """test_version满足小于5时,跳过此用例"""
        print("test3")

    @unittest.skipUnless(test_version > (5,), "test condition don't support")
    def test_04(self):
        """test_version不满足大于5时,跳过此用例"""
        print("test4")

    @unittest.expectedFailure
    def test_05(self):
        print(1 > 2)


@unittest.skip("skip this test class")
class SkipTestClass(unittest.TestCase):
    """忽略测试类"""
    @classmethod
    def setUpClass(cls):
        print("start")

    @classmethod
    def tearDownClass(cls):
        print("end")

    def test_07(self):
        print("test7")

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

五、unittest.main()介绍

用于将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader来搜索所有包含在此模块下的以test命名开头的测试方法,并依次执行用例;
执行用例的默认顺序是按ASCII码的顺序加载测试用例(即0-9,A-Z,a-z)
---此为最简单的执行unittest用例的方法,但若需按自己的顺序执行用例或添加保存测试报告可通过测试套件的方法,见如下。

上一篇 下一篇

猜你喜欢

热点阅读