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)

运行结果

生成的测试报告如下图所示:

测试报告截图

Python Unittest 自动化测试指南:从入门到实战

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

免费AI点我,无需注册和登录