欢迎访问宙启技术站
智能推送

使用unittestTestResult()来统计测试覆盖率

发布时间:2024-01-14 23:38:35

unittest是Python自带的测试框架,可以方便地进行单元测试。unittest模块中的TestResult类可以用来统计测试覆盖率,可以通过该类的方法来获取测试覆盖率的相关信息。

下面我们来看一个示例,假设我们有一个名为"calculator.py"的计算器程序,里面包含了四个简单的数学运算函数:add, subtract, multiply, divide。

# calculator.py

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

def multiply(a, b):
    return a * b

def divide(a, b):
    if b == 0:
        raise ValueError("除数不能为0")
    return a / b

我们可以通过编写单元测试代码来测试这些函数的功能,并使用unittest的TestResult类来统计测试覆盖率。

# test_calculator.py

import unittest
from calculator import add, subtract, multiply, divide

class CalculatorTestCase(unittest.TestCase):
    def test_add(self):
        result = add(2, 3)
        self.assertEqual(result, 5)

    def test_subtract(self):
        result = subtract(5, 3)
        self.assertEqual(result, 2)

    def test_multiply(self):
        result = multiply(4, 5)
        self.assertEqual(result, 20)

    def test_divide(self):
        result = divide(10, 2)
        self.assertEqual(result, 5)

if __name__ == "__main__":
    suite = unittest.TestLoader().loadTestsFromTestCase(CalculatorTestCase)
    result = unittest.TextTestRunner(verbosity=2).run(suite)

    # 获取测试覆盖率相关信息
    coverage = result.coverage()
    num_tests = len(result.failures) + len(result.errors) + len(result.skipped)
    num_passed = len(result.tests) - num_tests

    print(f"测试总数:{len(result.tests)}")
    print(f"通过的测试数:{num_passed}")
    print(f"失败的测试数:{len(result.failures)}")
    print(f"错误的测试数:{len(result.errors)}")
    print(f"跳过的测试数:{len(result.skipped)}")
    print(f"覆盖率:{coverage}%")

在上述代码中,我们编写了四个测试用例函数:test_add, test_subtract, test_multiply, test_divide,并使用assertEqual方法来断言函数的返回值是否与预期结果一致。

首先,我们通过unittest的TestLoader类的loadTestsFromTestCase方法将测试用例加载到测试套件中。然后,我们通过unittest的TextTestRunner类的run方法运行测试套件,并将结果保存在result变量中。

接着,我们通过result对象的coverage方法获取测试覆盖率的相关信息,将失败的测试数、错误的测试数、跳过的测试数以及通过的测试数都保存在相应的变量中。

最后,我们将这些统计信息打印出来,用来查看测试覆盖率。测试覆盖率表示被测试代码所覆盖的比例,通常以百分数表示。

总结:

通过unittest的TestResult类提供的coverage方法,能够方便地统计测试覆盖率。我们可以通过编写单元测试代码来测试我们的函数,并使用TestResult类来获取相关的统计信息,进而了解测试的有效性和覆盖程度。