Python Unittest 自动化测试指南:从入门到实战
Python Unittest 自动化测试指南
什么是 unittest?
unittest 是 Python 自带的一个测试框架,用于编写和运行单元测试。它提供了一些常用的测试工具,如断言 (assert),测试套件 (TestSuite),测试用例 (TestCase) 等。
unittest 的优点
- unittest 是 Python 自带的测试框架,无需安装任何第三方库
- unittest 提供了丰富的测试工具,如断言、测试套件、测试用例等
- unittest 可以自动化运行测试用例,并生成测试报告
- unittest 可以与持续集成工具(如 Jenkins)集成,实现自动化测试
unittest 的基本使用
编写测试用例
import unittest
class TestMath(unittest.TestCase):
def test_add(self):
self.assertEqual(1+1, 2)
def test_sub(self):
self.assertEqual(3-1, 2)
运行测试用例
if __name__ == '__main__':
unittest.main()
运行结果
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
断言
常用断言
- assertEqual(a, b):判断 a 和 b 是否相等
- assertNotEqual(a, b):判断 a 和 b 是否不相等
- assertTrue(x):判断 x 是否为 True
- assertFalse(x):判断 x 是否为 False
- assertIs(a, b):判断 a 和 b 是否为同一对象
- assertIsNot(a, b):判断 a 和 b 是否不为同一对象
- assertIsNone(x):判断 x 是否为 None
- assertIsNotNone(x):判断 x 是否不为 None
- assertIn(a, b):判断 a 是否在 b 中
- assertNotIn(a, b):判断 a 是否不在 b 中
- assertIsInstance(a, b):判断 a 是否为 b 的实例
- assertNotIsInstance(a, b):判断 a 是否不为 b 的实例
自定义断言
import unittest
def my_assert(x, y):
if x != y:
raise AssertionError(f'{x} != {y}')
class TestMath(unittest.TestCase):
def test_add(self):
my_assert(1+1, 2)
def test_sub(self):
my_assert(3-1, 2)
测试套件
测试套件的作用
测试套件是将多个测试用例或测试套件组合在一起,以便一次运行多个测试用例或测试套件。
示例代码
import unittest
class TestAdd(unittest.TestCase):
def test_add_int(self):
self.assertEqual(1+2, 3)
def test_add_str(self):
self.assertEqual('hello'+'world', 'helloworld')
class TestSub(unittest.TestCase):
def test_sub_int(self):
self.assertEqual(5-2, 3)
def test_sub_str(self):
self.assertEqual('helloworld'.replace('world', ''), 'hello')
suite1 = unittest.TestSuite()
suite1.addTest(TestAdd('test_add_int'))
suite1.addTest(TestAdd('test_add_str'))
suite2 = unittest.TestSuite()
suite2.addTest(TestSub('test_sub_int'))
suite2.addTest(TestSub('test_sub_str'))
all_tests = unittest.TestSuite([suite1, suite2])
测试报告
使用 HTMLTestRunner 生成测试报告
HTMLTestRunner 是一个 Python 第三方模块,可用于生成 HTML 格式的测试报告。
安装 HTMLTestRunner
pip install HTMLTestRunner
示例代码
import unittest
import HTMLTestRunner
class TestAdd(unittest.TestCase):
def test_add_int(self):
self.assertEqual(1+2, 3)
def test_add_str(self):
self.assertEqual('hello'+'world', 'helloworld')
class TestSub(unittest.TestCase):
def test_sub_int(self):
self.assertEqual(5-2, 3)
def test_sub_str(self):
self.assertEqual('helloworld'.replace('world', ''), 'hello')
suite1 = unittest.TestSuite()
suite1.addTest(TestAdd('test_add_int'))
suite1.addTest(TestAdd('test_add_str'))
suite2 = unittest.TestSuite()
suite2.addTest(TestSub('test_sub_int'))
suite2.addTest(TestSub('test_sub_str'))
all_tests = unittest.TestSuite([suite1, suite2])
with open('report.html', 'wb') as f:
runner = HTMLTestRunner.HTMLTestRunner(stream=f, title='Test Report')
runner.run(all_tests)
运行结果
生成的测试报告如下图所示:

原文地址: https://www.cveoy.top/t/topic/n6OK 著作权归作者所有。请勿转载和采集!