使用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类来获取相关的统计信息,进而了解测试的有效性和覆盖程度。
