目录
1、测试用例(TestCase):测试用例是unittest中最小的测试单元,用于检查特定场景下的代码行为。
2、测试固件(Fixture):测试固件用于设置测试环境和清理测试环境。
3、断言方法(Assertion Method):断言方法用于验证测试用例的实际结果与预期结果是否一致。
4、测试套件(Test Suite):测试套件是一系列测试用例或测试套件的集合。
5、测试运行器(Test Runner):测试运行器用于执行测试用例并返回测试结果。
1)安装:pip install html-testRunner
2、使用 TestLoader加载测试用例,TestLoader类下有多个加载测试用例方法:
1)loadTestsFromName可以自动发现并加载测试用例,这是最常见的使用方法。
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)