python之unittest单元测试框架

1、单元测试的概念

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。

对于单元测试中单元的含义,要根据实际情况去判定其具体含义,一个单元可能是功能模块、类、方法(函数)等。

2、单元测试工具

不同的编程语言都有比较成熟的单元测试框架,语法规则有些差别,其核心思想都是相通的。常见的单元测试框架有:

Java语言:Junit、TestNG

Python语言:UnitTest、Pytest、UnitTest单元测试框架

3、unittest框架介绍

UnitTest是Python自带的一个单元测试框架,用它来做单元测试。也经常应用到UI自动化测试和接口自动化测试中,用来管理和维护测试用例脚本。

使用UnitTest框架的好处:

1. 能够组织多个用例去执行(可以把多条测试用例封装成一个测试套件,实现批量执行测试用例)

2. 提供了丰富的断言方法,方便对用例执行的结果进行判断

3. 能够生成HTML格式的测试报告

4. 使用Fixture功能可以减少代码的冗余

UnitTest核心要素:

  • TestCase:用户自定义的测试用例的基类,调用run()方法,会依次调用setUp方法、执行用例的方法、tearDown方法。
  • TestSuite:测试用例集合,可以通过addTest()方法手动增加Test Case,也可以通过TestLoader自动添加Test Case,TestLoader在添加用例时,会没有顺序。
  • TestRunner:运行测试用例的驱动类,可以执行TestCase,也可以执行TestSuite,执行后TestCase和TestSuite会自动管理TestResult。
  • TestLoader:简单来说就是做一些测试过程中需要准备的东西,比如创建临时的数据库,文件和目录等,其中setUp()和setDown()是最常用的方法。

下面我们将通过一些代码来为大家详细讲解这四个模块的用法。

4、Testcase

Testcase就是表示测试用例。我们现在定义一个实现登录操作的函数,示范代码如下:

 下面我们将对定义的登录函数进行测试,我们先来了解一下在unittest中是如何定义测试用例的:

  • 需要导入测试使用的unittest模块;
  • 定义测试类:新建的测试类必须继承unittest.TestCase;
  • 定义测试方法:定义的测试方法名称必须以test开头。

接下来我们就具体的定义一个测试类,并且定义一些测试方法来说明TestCase的用法和作用,示范代码如下:

 这里我们只列出了部分测试用例为大家做示范,具体的测试用例大家可以按照自己的裂解去自行扩展,那么,定义好了测试用例,如何去执行用例呢,这里我们介绍两种去运行测试用例的方法:

  • 方式一:使用pycharm在代码上点击鼠标右键,选择使用UnitTest运行
  • 方式二:调用unittest.main()来运行

5、TestSuite

TestSuite就是测试集、测试套件,即将多条测试用例集合在一起,就是一个TestSuite的使用,常与TestLoader结合使用。

1)发现所有的用例

我们在定义完成测试用例后,会使用TestLoader来初始化一个加载器,然后使用loader来发现所有的用例,最后通过TextTestRunner来运行所有的用例,这种方法是最常用的一种,示范代码如下:

 2)加载部分用例

有时候我们在做测试的时候,只需要执行部分用例,而不需要全部执行,这时我们就不能再使用discover()方法发现所有的用例了,下面我们以只加载注册和登录模块的用例为大家进行演示,示范代码如下:

 6、TextTestRunner

TextTestRunner是用来执行测试用例的并生成测试报告的,需要和测试套件配合使用。下面我们为大家演示使用TextTestRunner将测试结果存储到指定文件中的方法,示范代码如下:

 运行后,我们发现在项目的根目录下生成了一个 test_report.txt 的测试结果文件,具体内容如下:

 在这里我们要特别说明一下,在文本格式的测试报告当中,. 表示测试结果为通过,F表示断言失败,E表示程序当中有错误。

在上面的代码当中,我们将测试结果存储在一个文本文档中,而在目前企业级的自动化测试中,是很少使用txt格式的测试报告的,一是可读性不强,而是显得不那么专业,取而代之的是html格式的测试报告,生成html格式的测试报告的方法不是python内置的,需要我们手动去下载,然后导入,下面我们使用一段代码为大家演示,示范代码如下:

 运行后,我们会在项目根目录下得到一个html格式的测试报告,具体如下:

这份报告看起来会更加有阅读性,也能够很好的整理数据,方便我们发送给有需要的人去阅读,去分析测试结果。

7、Fixture

Fixture是一个概述,对一个测试用例环境的初始化和销毁就是一个Fixture。

下面我们来详细介绍Fixture控制级别:

方法级别的使用:

  • 初始化(前置处理):def setUp(self);
  • 销毁(后置处理):def tearDown(self);
  • 运行于测试方法的始末,即执行一次测试方法就会执行一次setUp和tearDown。

类级别的使用:

  • 初始化(前置处理):@classmethod def setUp(cls);
  • 销毁(后置处理):@classmethod def tearDown(self);
  • 运行于测试类的始末,即每个测试类只会运行一次setUp和tearDown。

下面通过一段代码来为大家演示两者的使用,示范代码如下:

 8、unittest中的断言

1)断言的概念

  断言就是让程序代替人为判断测试程序执行结果是否符合预期结果的过程。unittest 中提供了非常丰富的断言方法,但是常用的也就那么几个,并且使用起来也比较简单:

 2)断言的使用方式

断言方法经在unittest.TestCase 类中定义好了,而且我们自定义的测试类已经继承了 TestCase ,所以在测试方法中直接调用即可,示范代码如下:

猜你喜欢

转载自www.cnblogs.com/Cactus-xiaot/p/12938504.html