unittest 单元测试框架详解

单元测试是一项对技术要求很高的工作,只有白盒测试人员和软件开发人员才能胜任。但用单元测试框架做单元测试却十分简单,而且单元测试框架不仅可以用来做单元测试,它还适用于不同类型的「自动化」测试。

1.提供测试用例组织和(批量)执行
在 Python 中,我们编写的代码可以定义类、方法和函数,那么如何定义一条「测试用例」?如何灵活地控制这些「测试用例」的执行顺序?单元测试框架会告诉我们。

2.提供丰富的断言方法
当我们进行功能测试时,测试用例需要有预期结果。当测试用例的执行结果与预期结果不一致时,判定测试用例失败。在自动化测试中,通过「断言」来判定测试用例执行成功与否。
一般单元测试框架会提供丰富的断言方法。例如,判断相等/不相等、包含/不包含、True/False 等。

3.提供丰富的日志和输出HTML报告
自动化测试在运行过程中并不需要人工干预,因此执行的结果非常重要。我们需要从结果中清晰地看出失败的原因。另外,我们还需要统计测试用例的执行结果,如总执行时间、失败测试用例数、成功测试用例数等,这些功能也是由单元测试框架提供的。

从以上几点来看,单元测试框架不仅可以用来写测试用例,凡是涉及自动化测试的工作都可以由单元测试框架完成拓展支持,如 Web 自动化测试、App 自动化测试,以及接口自动化测试等。

6.1 认识 unittest

在 Python 中有诸多单元测试框架,如 unittest、nose、pytest 等,Python 3.8.x 版本已经将 unittest 作为一个标准模块放入 Python 开发包中。

6.1.1 认识单元测试

不用单元测试框架能写单元测试吗?答案是肯定的。单元测试本质上就是通过一段代码去验证另外一段代码,所以不用单元测试框架也可以写单元测试。下面就通过例子演示。

创建一个被测试模块文件:calculator.py

 View Code

test_calculator.py

 View Code

这样的测试存在着一些问题。首先,我们需要自己定义断言失败的提示;其次,当一个测试函数运行失败后,后面的测试函数将不再执行;最后,执行结果无法保存并输出到统计HTML报告。
当然,我们可以通过编写更多的代码来解决这些问题,但这就偏离了我们做单元测试的初衷。我们应该将重点放在测试本身,而不是其他上面。引入单元测试框架可以很好地解决这些问题。

下面通过 unittest 单元测试框架重新编写测试用例。

test_calculator_ut.py

 View Code

运行结果如下

引入 unittest 模块。如果想用 unittest 编写测试用例,那么一定要遵守它的命名「规则」。
(1)创建一个测试类,这里为 TestCalculator 类,必须要继承 unittest 模块的 TestCase 类。
(2)创建一个测试方法,该方法必须以「test」开头。

接下来的测试步骤与前面测试代码相同。

首先,调用被测试类,传入初始化数据。
其次,调用被测试方法,得到计算结果。通过 unittest 提供的 assertEqual()方法来断言结果是否与预期结果相同。该方法由 TestCase 父类提供,由于继承了该类,所以可以通过 self 调用。
最后,调用 unittest 的 main()来执行测试用例,它会按照前面的两条命名规则查找测试用例并执行。

测试结果明显丰富了很多,用「.」表示一条运行通过的测试用例,用「F」表示一条运行失败的测试用例,用「E」表示一条运行错误的测试用例,用「s」表示一条运行跳过的测试用例。本次统计运行了 4 条测试用例,运行时间为 0.001s,失败(failures)了 1 条测试用例。失败的测试用例也有更清晰的说明。

6.1.2 重要的概念

在 unittest 文档中有四个重要的概念:Test Case、Test Suite、Test Runner 和 Test Fixture。只有理解了这几个概念,才能理解单元测试的基本特征。

1.Test Case
Test Case 是最小的测试单元,用于检查特定输入集合的特定返回值。unittest 提供了 TestCase 基类,我们创建的测试类需要继承该基类,它可以用来创建新的测试用例。

2.Test Suite
测试套件是测试用例、测试套件或两者组成的集合,用于组装一组要运行的测试。unittest 提供了 TestSuite 类来创建测试套件。

3.Test Runner
Test Runner 是一个输出组件,用于协调测试的执行并向用户提供结果。Test Runner 可以使用图形界面、文本界面或返回特殊值来展示执行测试的结果。unittest 提供了 TextTestRunner 类运行测试套件,为了生成 HTML 格式的测试报告,后面会选择使用 HTMLTestRunner 运行类。

4.Test Fixture
Test Fixture 代表执行一个或多个测试所需的环境准备,以及关联的清理动作。例如

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康冕峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值