单元测试对技术要求很高,但用单元测试框架做单元测试却十分简单,而且单元测试框架不仅可以用来做单元测试,它还适用于不同类型的“自动化”测试。
它提供了以下功能:
- 提供测试用例组织和执行
定义一条测试用例,灵活地控制测试用例的执行等 - 提供丰富的断言方法
进行功能测试时,测试用例需要有预期结果。当测试用例的执行结果与预期结果不一致时,判定测试用例失败。在自动化测试中,通过“断言”来判定测试用例执行成功与否。一般单元测试框架会提供丰富的断言方法。例如,判断相等/不相等、包含/不包含、True/False 等。 - 提供丰富的日志
自动化测试运行不需要人工干预,因此执行的结果非常重要。我们需要从结果中清晰地看出失败的原因。此外,我们还需要统计测试用例的执行结果,如总执行时间、失败测试用例数、成功测试用例数等,这些功能也是由单元测试框架提供的。
单元测试框架不仅可以用来写测试用例,凡是涉及自动化测试的工作都可以由单元测试框架完成,如 Web 自动化测试、App 自动化测试,以及接口自动化测试等。
1.认识 unittest
在 Python 中有诸多单元测试框架,如 doctest、unittest、pytest、nose 等,unittest 已经作为一个标准模块放入 Python 开发包中。
(1)认识单元测试
单元测试本质上就是通过一段代码去验证另外一段代码,因此,不用单元测试框架也可以写单元测试。
创建一个被测试文件 calculator.py 。
# 计算器类
class Calculator:
''' 用于完成两个数的加、减、乘、除'''
def __init__(self, a, b):
self.a = int(a)
self.b = int(b)
# 加法
def add(self):
return self.a + self.b
# 减法
def sub(self):
return self.a - self.b
# 乘法
def mul(self):
return self.a * self.b
# 除法
def div(self):
return self.a / self.b
创建 test_calculator.py 文件,代码如下:
from calculator import Calculator
def test_add():
c = Calculator(3, 5)
result = c.add()
assert result == 8, '加法运算失败'
def test_sub():
c = Calculator(7, 2)
result = c.sub()
assert result == 5, '减法运算失败'
def test_mul():
c = Calculator(3, 3)
result = c.mul()
assert result == 10, '乘法运算失败'
def test_div():
c = Calculator(6, 2)
result = c.div()
assert result == 3, '除法运算失败'
if __name__ == '__main__':
test_add()
test_sub()
test_mul()
test_div()
上面的测试方法存在一些问题:
- 首先,我们需要自己定义断言失败的提示;
- 其次,当一个测试函数运行失败后,后面的测试函数将不再执行;
- 最后,执行结果无法统计。
下面通过 unittest 单元测试框架重新编写测试用例:
import unittest
from calculator import Calculator
class TestCalculator(unittest.TestCase):
def test_add(self):
c = Calculator(3, 5)
result = c.add()
self.assertEqual(result, 8)
def test_sub(self):
c = Calculator(7, 2)
result = c.sub()
self.assertEqual(result, 5)
def test_mul(self):
c = Calculator(3, 3)
result = c.mul()
self.assertEqual(result, 10)
def test_div(self):
c = Calculator(6, 2)
result = c.div()
self.assertEqual(result, 3)
if __name__ == '__main__':
unittest.main()
创建一个测试类必须要继承 unittest 模块的 TestCase类。创建一个测试方法,该方法必须以“test”开头。
通过 unittest