自动化测试之七:unittest单元测试框架

前言:

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

(1) 提供用例组织和执行

(2) 提供丰富的断言方法

(3)提供丰富的日志

1 认识 unittest

在python中有很多单元测试框架,如:doctest,unittest,pytest,nose等。现如今,unittest已经被作为一个标准模块放入python开发包中。

1.1 认识单元测试

不用单元测试框架能写单元测试吗,当然可以!单元测试的本质上就是通过一端代码验证另外一段代码,所以不用单元测试框架也可以写出单元测试,例:

以下两个文件都放置在unittest_use包下

运行test_cal.py后结果如下:

自动化测试之七:unittest单元测试框架

这样虽然可以实现测试的效果,但是也存在着问题,比如,我们要自己实现断言失败的信息,最后结果无法统计等。当然,我们可以编写更多的代码来解决问题,但这就偏离了我们做单元测试的初衷,我们应该把重点放在测试本身,而不是其他上面,所以引入单元测试框架就能很好的解决问题。如下:

输出结果:

自动化测试之七:unittest单元测试框架

上面测试用例,就是用unittest编写的,但是,使用unittest就要遵循其“规则”!!!!!!!!!!!!!!!!:

(1)创建一个类,类名自己起,这是无所谓的,但是必须要继承unittest模块的TestCase类

(2)创建测试方法,该方法必须要以“test”开头

如上面测试用例所示,测试结果不再使用assert断言方法自己定义失败断言了,而是直接调用assertEqual()方法来断言结果与预期是否相同,该方法由TestCase提供,所以直接self.assertEqual()调用即可。最后使用unittest的main()方法来执行测试,它会按照上面说的两条规则查找测试用例

结果分析:

从上面输出结果可以看到丰富了很多,其中,用点(.)表示一条运行通过的测试用例,用 F 表示一条运行失败的用例,用 E 表示一条运行错误的测试用例, 用 s 表示一条运行跳过的测试用例。

本次统计运行了4条测试用例,用时0.003s,失败(failures)了一条测试用例,并且失败的测试用例也有清晰的说明。

2 重要的概念

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

2.1 Test Case

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

2.2 Test Suite

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

2.3 Test Runner

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

2.4 Test Fixture

Test Fixture代表执行一个或多个测试所需的环境准备,以及关联的清理动作。例如,创建临时或代理数据库、目录,或者启动服务器京城。unittest中提供了setUp()/tearDown()、setUpClass()/tearDownClass()等方法来完成这些操作。

在理解了上面的几个概念之后,我们使用新的测试用例来进行测试,如下:

来源:一起学python吧

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月15日
下一篇 2021年1月15日

相关推荐