一文掌握python单元测试unittest(一)

目录

一、unittest简介

1、测试用例(TestCase):测试用例是unittest中最小的测试单元,用于检查特定场景下的代码行为。

2、测试固件(Fixture):测试固件用于设置测试环境和清理测试环境。

3、断言方法(Assertion Method):断言方法用于验证测试用例的实际结果与预期结果是否一致。

4、测试套件(Test Suite):测试套件是一系列测试用例或测试套件的集合。

5、测试运行器(Test Runner):测试运行器用于执行测试用例并返回测试结果。

二、unittest功能详解

1、测试用例(TestCase)

2、测试固件(Fixture)

3、断言方法(Assertion Method)

1)常用的断言方法:

2)自定义断言

        1、自定义新的断言方法:

        2、重写断言方法,并自定义错误消息

4、测试套件(Test Suite)

5、测试运行器(Test Runner)

1)安装:pip install html-testRunner

2)report_template.html有问题,需要手工修改下,见旧版的HtmlTestRunner(python2),新版的html-testRunner(兼容python3),生成的html报告打不开_htmltestrunner生成的测试报告打不开-优快云博客

3)简单示例如下:

三、组织和加载测试用例到测试套件的多种方法

1、手动添加测试用例到测试套件

2、使用 TestLoader加载测试用例,TestLoader类下有多个加载测试用例方法:

1)loadTestsFromName可以自动发现并加载测试用例,这是最常见的使用方法。

2)使用 discover 方法自动发现测试用例

3)loadTestsFromTestCase:从指定测试类中加载所有的测试方法.

4)loadTestsFromModule :从一个模块中自动发现并加载所有的测试用例

5)loadTestsFromNames:允许通过提供一系列的名称来加载测试用例。

6)getTestCaseNames:获取一个测试类中所有测试方法的名称。


unittest是Python内置的一个单元测试框架,它提供了一系列丰富的功能,帮助开发者编写和运行测试代码。本文将详细介绍unittest的各种功能,包括测试用例、测试固件、断言方法、测试套件、测试运行器等。

一、unittest简介

unittest源自JUnit,是Python标准库中的一个模块,用于编写和运行可重复的测试。unittest支持测试自动化,使得测试过程更加高效、稳定。以下是unittest的一些核心概念:

1、测试用例(TestCase):测试用例是unittest中最小的测试单元,用于检查特定场景下的代码行为。

2、测试固件(Fixture):测试固件用于设置测试环境和清理测试环境。

3、断言方法(Assertion Method):断言方法用于验证测试用例的实际结果与预期结果是否一致。

4、测试套件(Test Suite):测试套件是一系列测试用例或测试套件的集合。

5、测试运行器(Test Runner):测试运行器用于执行测试用例并返回测试结果。

二、unittest功能详解

1、测试用例(TestCase)

测试用例是unittest的核心,每个测试用例都是一个继承自unittest.TestCase的类。以下是一个简单的测试用例示例:

import unittest


class MyTestCase(unittest.TestCase):
    def test_add(self):
        self.assertEqual(1 + 1, 2)


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

在上述示例中,定义了一个名为MyTestCase的测试用例类,其中包含一个测试方法test_add。通过调用unittest.main(),可以运行该测试用例。

2、测试固件(Fixture)

测试固件用于设置和清理测试环境。unittest提供了以下几种固件方法:

  • setUp():在每个测试方法执行前调用,用于设置测试环境。
  • tearDown():在每个测试方法执行后调用,用于清理测试环境。
  • setUpClass():在所有测试方法执行前调用一次,用于设置类级别的测试环境。
  • tearDownClass():在所有测试方法执行后调用一次,用于清理类级别的测试环境。

以下是一个使用固件方法的示例:

import unittest


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

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

    def setUp(self):
        print("setUp")

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

    def test_query(self):
        print("Executing a query success")


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

3、断言方法(Assertion Method)

1)常用的断言方法:
  • assertEqual(a, b):检查a == b是否为真。
  • assertNotEqual(a, b):检查a != b是否为真。
  • assertTrue(x):检查bool(x)是否为真。
  • assertFalse(x):检查bool(x)是否为假。
  • assertIs(a, b):检查a is b是否为真。
  • assertIsNot(a, b):检查a is not b是否为真。
  • assertIsNone(x):检查x is None是否为真。
  • assertIsNotNone(x):检查x is not None是否为真。
  • assertIn(a, b):检查a in b是否为真。
  • assertNotIn(a, b):检查a not in b是否为真。
  • assertIsInstance(a, b):检查isinstance(a, b)是否为真。
  • assertNotIsInstance(a, b):检查not isinstance(a, b)是否为真。
  • assertAlmostEqual(a, b):检查round(a-b, 7) == 0是否为真,用于浮点数比较。
  • assertNotAlmostEqual(a, b):检查round(a-b, 7) != 0是否为真,用于浮点数比较。
  • assertGreater(a, b):检查a > b是否为真。
  • assertGreaterEqual(a, b):检查a >= b是否为真。
  • assertLess(a, b):检查a < b是否为真。
  • assertLessEqual(a, b):检查a <= b是否为真。

对于复杂的数据结构:

  • 字典dict:assertDictEqual
  • 列表list:assertListEqual
  • 元组tuple:assertTupleEqual
  • 集合set:assertSetEqual
  • 多行字符:assertMultiLineEqual
import unittest
import warnings


class TestExample(unittest.TestCase):
    # 测试相等性
    def test_equal(self):
        self.assertEqual(1, 1)

    # 测试不相等性
    def test_not_equal(self):
        self.assertNotEqual(1, 2)

    # 测试为真
    def test_true(self):
        self.assertTrue(True)

    # 测试为假
    def test_false(self):
        self.assertFalse(False)

    # 测试身分相等
    def test_is(self):
        self.assertIs(1, 1)

    # 测试身分不相等
    def test_is_not(self):
        self.assertIsNot(1, 2)

    # 测试是None
    def test_is_none(self):
        self.assertIsNone(None)

    # 测试不是None
    def test_is_not_none(self):
        self.assertIsNotNone(1)

    # 测试包含
    def test_in(self):
        self.assertIn(1, [1, 2, 3])

    # 测试不包含
    def test_not_in(self):
        self.assertNotIn(4, [1, 2, 3])

    # 测试实例类型
    def test_is_instance(self):
        self.assertIsInstance(1, int)

    # 测试不是实例类型
    def test_not_is_instance(self):
        self.assertNotIsInstance(1, str)

    # 测试近似相等
    def test_almost_equal(self):
        self.assertAlmostEqual(1.00000001, 1.0)

    # 测试近似不相等
    def test_not_almost_equal(self):
        self.assertNotAlmostEqual(1.00000001, 1.00000002)

    # 测试大于
    def test_greater(self):
        self.assertGreater(2, 1)

    # 测试大于等于
    def test_greater_equal(self):
        self.assertGreaterEqual(2, 1)

    # 测试小于
    def test_less(self):
        self.assertLess(1, 2)

    # 测试小于等于
    def test_less_equal(self):
        self.assertLessEqual(1, 2)

    # 测试正则表达式匹配
    def test_regex(self)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值