单元测试框架unittest

  • unittest是python自带的自动化测试框架
  • 主要内容:
    • TestCase(测试用例)
    • TestSuite(测试套件, 把多个TestCase集成到一个测试TestSuite)
    • TestRunner(执行测试用例)
    • TestLoader(自动从代码中加载多个测试用例)
    • Fixture(UnitTest特性)

1. TestSuite

  • 多条测试用例集合在一起, 就是一个TestSuite
  • 使用
    • import 导入 unittest
    • import 导入其他的包含测试用例的py文件
      • py文件的命名规则与变量名相同
    • 实例化unittest.TestSuite类的对象
      • suite = unittest.TestSuite()     (suite为TestSuite实例化的名称)
    • 调用对象的addTest方法
      • addTest(py文件名.类名("方法名"))
    • 用unittest.makesuite一次导入一个类中的所有测试方法
      • 添加扩展: suite.addTest(unittest.makeSuite(ClassName))    (搜索指定ClassName内test开头的方法并添加到测试控件中)

2. TextTestRunner

  • 作用:    用来执行测试用例和测试套件的
  • 使用方法
    • 先实例化TextTestRunner的对象   runner = unittest.TextTestRunner()
    • 调用对象的run方法   runner.run(suite)

3. TestLoader

  • 用来加载TestCase到TestSuite中, 即加载满足条件的测试用例, 并把测试用例封装成测试套件
  • 使用unittest.TestLoader, 通过该类下面的discover()方法自动搜索指定目录下指定开头的py文件, 并将查找到的测试用例组装到测试套件
    • suiite = unittest.TestLoader().discover('.', pattern='test*.py')

4. Fixture

  • 可以在测试用例执行之前自动调用指定函数, 在测试用例之后自动调用个指定函数
  • 控制级别
    • 方发级
      • 每个方法执行之前和之后都自动调用函数
      • 在TestCase所在的class中定义方法
      • def setUp(self) 当测试用例前, 自动被调用
      • def setDown(self)   当测试用例执行时, 自动被调用
      • 如果一个TestCase中有多个测试用例, 娜美setUphe setDown就会被执行多次
    • 类级
      • 不管类中有多少方法, 一个类执行前后都自动调用函数
      • 类的fixture一定是类方法
      • @classmethod   def setUpclass(cls)类开始是自动调用的方法
      • @classmethod    def setDown(cls) 类结束的时候自动调用的方法
    • 模块级
      • 不管模块中有多少类, 一个模块执行前后都自动调用函数
      • def setUpModule()  在py文件开始的时候自动调用
      • def setDownModule()  在py文件结束的时候自动调用 

5. 断言

  • 让程序判断测试用例的执行结果是否符合预期

1. unittest断言

  • assertEqual(参数1, 参数2)
    • 如果参数1和参数2的值相等, 则断言成功, 否则断言失败
    • 两个参数, 一个存放实际结果, 一个存放预期结果

6. 参数化

  • 多个测试用例代码相同, 只是测试数据不同, 预期结果不同, 可以吧多个测试用例参数化技术合并为一个测试用例
  • 使用方法:
    • 第一步:导入from parameterized import parameterized
    • 第二步: 在方法上面使用@parameterized.expand()修饰方法
      • expand()里面是一个列表
      • 列表里面放多个元组, 每个元组的成员就代表调用方法使用的实参
      • 列表中有几个元组, 方法就会自动被调用几次

7. 跳过

  • 可以通过@unittest.skip跳过指定的方法或者函数

8. texttestrunner测试报告

  • 第一步: 用open, w方式打开测试报告文件
  • 第二步: 实例化TectTestRunner对象
  • 第三步: 调用对象的run方法执行测试套件
  • 第四步: 关闭open打开的文件

9. HTML测试报告

  • 把文件HTMLRunner.py拷贝到项目目录下
  • 在代码中导入模块from HTMLRunner import HTMLRunner
  • 调用HTMLTestRunner(steam=file, title="我的第一个测试报告")
    • 第一个参数是用open打开的文件, 打开的文件拓展名一定是.html
    • open打开文件的时候, wb, 不用指定字符集
  • 调用runner对象的run方法执行测试套件
  • 关闭open打开的文件