Pycharm — UnitTest

发布时间 2023-07-17 22:44:44作者: 鹿先森JIAN

UnitTest框架

介绍

是Python⾃带的一个单元测试框架,可以用来做单元测试

测试⼈员⽤来做⾃动化测试,作为⾃动化测试的执⾏框架,即管理和执⾏⽤例的

使用好处

  • 1. 能够组织多个⽤例去执⾏
  • 2. 提供丰富的断⾔⽅法
  • 3. 能够⽣成测试报告

UnitTest核心要素(组成)

 

  • 1. TestCase测试⽤例,⽤来书写真正的⽤例代码(脚本)
  • 2. TestSuite测试套件,⽤来组装(打包)TestCase(测试⽤例)的,即可以将多个⽤例脚本⽂件组装到⼀起
  • 3. TestRunner测试执⾏(测试运⾏),用来执⾏TestSuite(测试套件)
  • 4. TestLoader测试加载,是对 TestSuite(测试套件) 功能的补充,⽤来组装(打包) TestCase(测试⽤例)
  • 5. Fixture测试夹具,是⼀种代码结构,书写前置⽅法(执⾏⽤例之前的⽅法)代码和后置⽅法(执⾏⽤例之后的⽅法)代码,即⽤例执⾏顺序:前置 ---> ⽤例 ---> 后置

TestCase测试用例

一个测试用例就是一个.py文件,文件中可创建多个测试类,类中可创建多个测试方法。

测试用例编写示例:

  • 1. 导包:import unittest
  • 2. 定义测试类:新建测试类必须继承:unittest.TestCase
  • 3. 定义测试方法:测试方法名称命名必须以test开头
  • 4. 执行

TestSuite测试套件

将多条⽤例脚本集合在⼀起,就是套件,即⽤来组装⽤例的。

使用步骤:

1. 实例化测试套件:suite = unittest.TestSuite()

2. (方式一)添加一个测试类中的一个测试方法:

suite.addTest(ClassName("MethodName"))

其中,ClassName:类名MethodName:方法名

(方式二)添加一个测试类:

suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(ClassName))

suite.addTest(unittest.makeSuite(ClassName))

把指定ClassName测试类中的测试用例全部添加到测试套件中

使用示例:

创建cal.py文件,编写TestAdd类和TestSub类,及类内方法

编写 hm_02_testsuite.py文件,右键运行

测试结果:

TestRunner测试执⾏

用来执⾏TestSuite(测试套件)

使用步骤:(示例看上图)

  • 1. 导包 import unittest
  • 2. 实例化 执⾏对象:unittest.TextTestRunner()
  • 3. 执⾏对象.run(套件对象)

TestLoader测试加载

TestSuite一次只能添加单个测试方法或单个测试类,而TestLoader能一次添加多个测试用例(.py文件)

用来加载TestCase到TestSuite中,即加载满足条件的测试用例,并把测试用例封装成测试套件。

使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下指定开头的.py文件,并将查找到的测试用例组装到测试套件。

Fixture测试夹具

在⽤例执⾏前后会⾃动执⾏的代码结构

⽅法级别Fixture

每个测试方法执⾏前后,会执行一次setUptearDown

比如:登录需要先验证码,可以把获取验证码的请求放在前置方法里。

类级别Fixture

每个测试类执行前后,会执行一次setUpClasstearDownClass

模块级别Fixture(了解)

模块,就是代码⽂件

每个模块执⾏前后,会执⾏⼀次setUpModuletearDownModule

示例:

UnitTest断言

使用代码自动的判断预期结果和实际结果是否相符

常用断言方法

assertEqual(预期结果,实际结果)

判断预期结果和实际结果是否相等,如果相等,用例通过;如果不相等,抛出异常,用例不通过。

assertIn(预期结果,实际结果)

判断预期结果是否包含在实际结果中,如果存在,用例通过,如果不存在,抛出异常,用例不通过。

断言使用方式

断言方法已经在unittest.TestCase类中定义了,我们自定义的测试类已经继承了TestCase,所以在测试方法中直接调用父类中的断言方法即可。

parameterized 参数化

安装 parameterized 插件

因为参数化的插件不是unittest自带的,所以想要使用,需要进行安装。

安装方式有多种,可以在终端Terminal通过代码安装;可以在Settings设置通过搜索来安装,还可以通过导入离线安装包来安装。

使用步骤

  • 1. 导包 from parameterized import parameterized
  • 2. 修改测试方法,将测试方法中的测试数据使用变量表示
  • 3. 组织测试数据,格式 [(), (), ()],一个元组就是一组测试数据
  • 4. 参数化,在测试方法上方使用装饰器 @parameterized.expand(测试数据)
  • 5. 运行(直接 TestCase 或者使用 suite 运行)

注意:测试数据的格式为列表内嵌元组:[(), (), ()],一个元组就是一组测试数据。

方法一:get()方法把需要的值取出,组成元组,再添加进列表。

方法二:values()方法获取所有值,转为元组,再添加到列表。(推荐)

测试报告

生成测试报告需要第三方工具插件,插件有很多。比如 HTMLTestReport 插件。

安装命令:pip install HTMLTestReport

使用步骤

  • 1. 导包:from htmltestreport import HTMLTestReport
  • 2. 封装测试套件:TestSuite或者TestLoader
  • 3. 实例化 HTMLTestReport 对象
  • 4. 执行测试套件

举例:登录用例测试,生成测试报告

1、创建一个目录:login_report

2、编写测试数据(login_data.json)

3、配置路径(config.py)

4、定义方法:读取测试数据、登录判断

5、编写测试用例,参数化

6、生成测试报告

跳过

对于一些未完成的或者不满足测试条件的测试函数和测试类,可以跳过执行。

使用方式

1.直接将测试函数标记成跳过

@unittest.skip('跳过的原因描述')

2.根据条件判断测试函数是否跳过

@unittest.skipIf(判断条件, reason='原因')     # 判断条件为 True, 执行跳过

举例