6.unittest单元测试框架

单元测试对技术要求很高,但用单元测试框架做单元测试却十分简单,而且单元测试框架不仅可以用来做单元测试,它还适用于不同类型的“自动化”测试。
它提供了以下功能:

  • 提供测试用例组织和执行
    定义一条测试用例,灵活地控制测试用例的执行等
  • 提供丰富的断言方法
    进行功能测试时,测试用例需要有预期结果。当测试用例的执行结果与预期结果不一致时,判定测试用例失败。在自动化测试中,通过“断言”来判定测试用例执行成功与否。一般单元测试框架会提供丰富的断言方法。例如,判断相等/不相等、包含/不包含、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

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值