python单元测试怎么写?怎么使用unittest进行单元测试

猿友 2021-06-30 15:11:54 浏览数 (3578)
反馈

与java不同,python学习到单元测试这个概念更多的情况下是在学习自动化测试框架的时候接触到的,而且使用的单元测试框架也五花八门。但其中最有名的可能就是unittest了。如果说unittest的名号还不够响亮的话,你可以看看他的曾用名——PyUnit,没错,他也是xUnit家族的一员,他家最出名的Junit在业界内声明显赫,现在你知道unittest有多厉害了吧?今天我们就来简单的了解一下unittest的使用,也借此机会学习一下unittest单元测试怎么写吧!

unittest引入

unittest框架现在已经被python官方“收编”,unittest作为python标准包支持的库,在使用时只需要直接引入即可,不需要使用​pip​进行安装。

如何写单元测试代码

单元测试代码可以简单的分成三步,分别为​Given​,​When​,​Then​。​Given​代表初始状态或者前置条件(可以简单的理解为数据输入);​When​代表行为发生,也就是进行测试动作;Then​则是断言结果。

所以大部分情况下我们可以把单元测试的代码分为三块:

  1. 第一块代码负责测试前的数据处理,比如输入数据等。
  2. 第二块代码负责调用相关的功能模块进行测试。
  3. 第三块代码负责将测试的结果与我们期待的结果进行比对,从而得出测试结果(通过或者失败)。

代码实战

以一个简单的计算功能为例,以下是这个计算模块的方法(文件名为calculator.py):

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


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

我们设计了一些简单的测试代码(代码解读详见注释):

from calculator import *  # 导入目标模块
import unittest # 导入unittest包


class TestCount(unittest.TestCase):
# 测试代码写在一个测试类里面

def test_add(self):
# 我们要测的是一个add函数,他传入两个参数
x = 5
y = 6
# 输入测试数据
res = add(x, y) # 将数据传递给被测函数,然后将结果存在res中
self.assertEqual(res, 11) # 使用断言判断res的值是否等于期待的值(这里期待为11)
# 如果res的值等于期待的值,则测试通过,反之测试失败

def test_substract(self):
# 这是另一个测试代码,使用简写的方式将第一二步合在一起
res = substract(11, 6)
self.assertEqual(res, 5)
 以上代码只是用来介绍如何使用unittest,测试用例设计得比较随意。实际上测试用例设计需要考虑很多,要通过测试用例来证明目标代码的功能健全,所以对于一个简单的相加函数而言,这样的测试用例略显简单了。详细的测试用例设计小编以后会继续分享,关注W3C技术头条,学习如何编写更好的测试用例!
python作为一种代码易于理解的语言,实际上单元测试只在比较正规和大型的项目上会比较常见,unittest的更常见用法是与selenium集成为一个测试框架,由unittest提供比较好的用例管理和断言,由selenium进行功能测试。这时候unittest已经不算是单元测试工具了(是用例管理工具)。

小结

对于初学者而言,以上简单的测试案例已经足够入门了。但实际上在测试的过程中还会遇到很多对功能的要求,比如说功能代码的执行速度是否符合要求;如何聚合测试;代码抛出异常如何跳过等等,这些都是unittest的学习内容,而对于完整的unittest学习,一篇文章是讲不完的,所以小编后续也会根据unittest的部分功能进行逐一介绍。以上就是python单元测试怎么写的全部内容了,各位读者是否满意呢?


0 人点赞