unittest单元测框架(十三)

时间:2022-12-13 11:27:09

Django默认使用python的标准库unittest编写测试用例。学习Django单元测试之前,先学习下unittest单元测试框架的基本使用。

  • 提供用例编写规范与执行:当编写的测试用例达到成百上千条时,首先要解决用例的规范化问题,每个人都有编写代码的习惯,单元测试框架提供了统一的用例编写规范。
  • 提供专业的比较方法:不管是功能测试,还是单元测试,在用例执行到最后都需要将实际结果与预期结果进行比较,这个比较的过程在单元测试中称之为“断言”,从而判断用例能否测试通过。单元测试框架一般会提供丰富的断言方法。例如,断言相等/不相等,包含/不包含,True/False等。
  • 提供丰富的测试日志:提供测试用例的执行日志也是单元测试必须具备的功能之一,测试用例执行失败时抛出明确的失败信息,测试用例执行完成后提供执行结果信息。例如,统计失败用例数,成功用例数和执行时间等。

从单元测试框架所提供的几点功能来看,它可以帮助我们完成不同级别测试的自动化:
1.单元测试:unittest
2.HTTP接口自动化测试:unittest+Requests
3.Web UI自动化测试:unittest+Selenium
4.移动自动化测试:unittest+appium

下面实现一个简单的单元测试

1.简单的加法和减法功能实现,module.py代码如下:
# -*-encoding:utf-8-*-

class Calculator():
    """docstring for 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
2.使用unittest单元测试框架对Calculator类的方法进行测试。在与module.py同级的目录下创建test.py测试文件。代码如下:
# -*-encoding:utf-8-*-

import unittest
from module import Calculator

class ModuleTest(unittest.TestCase):

    def setUp(self):
        self.cal = Calculator(9,3)


    def tearDown(self):
        pass

    def test_add(self):
        result = self.cal.add()
        self.assertEqual(result,12)

    def test_sub(self):
        result = self.cal.sub()
        self.assertEqual(result,6)

if __name__ == '__main__':
    # 构造测试集
    suite = unittest.TestSuite()
    suite.addTest(ModuleTest('test_add'))
    suite.addTest(ModuleTest('test_sub'))
    # 执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)

下面是对test.py测试代码的一些说明:
1).通过import导入unittest单元测试框架。
2).创建ModulTest类继承unittest.TestCase类。
3).setUp()和tearDown()两个方法在单元测试框架中较为特别,它们分别在每个用例的开始和结束时执行。setUp方法用于测试用例执行前的初始化工作,例如初始化变量,生成数据库测试数据,打开浏览器等。tearDown方法用于测试用例执行之后的善后工作,例如清除数据库测试数据,关闭文件,关闭浏览器等。
4).unittest要求测试用例方法必须以“test”开头。例如:test_add,test_sub等。
5).调用unittest.TestSuite()类的addTest()方法向测套件中添加测试用例。可以将测试套件理解为测试用例的集合。

3.运行结果如下截图

unittest单元测框架(十三)