美文网首页
python单元测试框架

python单元测试框架

作者: 心悦飞飞 | 来源:发表于2018-08-21 21:06 被阅读0次
    1. unittest单元测试框架?
      什么是unittest? 是python标准的单元测试框架模块
      2.unittest框架4个概念?
    • test fixture 测试固件
      代表测试前的准备动作
      代表测试后的清理动作
      如: 创建数据库连接 / 启动服务进程 / 测试环境的清理 / 关闭数据库的连接
    • test case 测试用例
      一个 test case 就是一个最小的测试单元, 也就是一个完整的测试流程.
      针对特定的输入,进行特殊的验证与响应.
      通过继承自unittest的基类TestCase,可以创建测试用例.
    • test suite 测试套件
      代表一组测试用例/ 一组测试套件/ 两者共同组成的集合.
    • test runner 测试运行器
      执行设定的测试用例 with 将测试结果提供给用户两部分功能组成.
    1. 单元测试加载方法?
      1> 直接通过unittest.main()方法加载,按照方法名的字符串表示的ASCII吗升序排序.
      2> 将所有的单元测试用例添加到测试套件集合中,然后一次性加载所有测试对象.
      4.测试用例?
      unittest框架通过TestCase类来构建测试用例
      所有自定义的类都必须继承TestCase类
      TestCase是所有测试用例的基类, 传入一个方法名,将返回一个测试用例对象.
      测试用例即可单独执行, 也可以组合成测试用例集,然后批量执行
      TestCase子类必须从父类继承的几个特殊的方法, 在测试用例执行是均会被依次执行.
    • setUp() 每个测试方法运行前先执行, 测试前的初始化工作.
    • tearDown() 每个测试方法运行结束后运行, 测试后的清理工作.
    • setUpClass() 所有的测试方法运行前运行, 单元测试前期准备,
      必须使用@classmethod装饰器修饰
      在setUp()方法之前执行,整个测试只执行一次.
    • tearDownClass() 所有的测试方法结束之后执行, 单元测试后期清理
      必须使用@tearDownClass装饰器修饰
      在tearDown()方法之后执行,整个测试只执行一次.
      最简单的测试用例只需要覆盖runTest()方法执行自定义的测试代码,这种方法是静态方法.
    1. 使用框架的规定有哪些?
      所有需要被执行的测试方法必须以" test "开头;
      .......
    2. 指定python源码的编码格式
      在源文件第一行或者第二行定义:
    # coding=<encoding name>
    # coding=utf-8
    # coding:utf-8
    # -*- coding: utf-8 -*-
    # vim: set fileencoding=utf-8
    

    7.测试结果说明:
    setUpClass()方法和tearDownClass()方法整个测试类运行过程只执行一次.
    setUp()方法和tearDown()方法在每个测试方法执行前执行后均被调用执行.
    测试结果输出 点. 表示测试方法被成功执行,
    测试结果出现E或F,表示测试方法执行失败或发生异常.
    动态方法不再覆盖runTest()方法,而是直接在一个测试类中编写.
    8.测试集合
    将功能相关的测试用例组合在一起称之为测试用例集
    通过TestSuite类来组装所有的测试用例集.
    使用测试集合可以同时执行同一个.py文件中的多个用例类.
    加载测试集合的步骤:
    1>TestLoader(测试用例加载器)根据传入的参数获取相应的测试用例的测试方法
    2>然后makeSuite把所有的测试用例组装成test suite集合.
    3>最后将test suite集合传给test runner执行.

    makeSuite通常由测试框架调用,用于生产test suite对象的实例.
    if name=='main':
    根据给定的测试类,获取以test开头的测试方法,并返回一个测试套件
    testCase1=unittest.TestLoader().loadTestsFromTestCase(TestClassName1)
    testCase2=unittest.TestLoader().loadTestsFromTestCase(TestClassName2)
    将多个测试类加载到测试套件中
    suite=unittest.TestSuite([testCase1,testCase2])
    设置verbosity=2,可以打印更详细的执行信息
    unittest.TextTestRunner(verbosity=2).run(suite)

    (1)TestLoader类: 测试用例加载器,返回一个测试用例集合
    (2)loadTestFromTestCase类: 根据给定的测试类, 获取其中所有以test开头的测试方法,返回集合
    (3)TestSuite类: 组装测试用例的实例,支持添加和删除用例,最后将传递给test runner进行执行
    (4)TextTestRunner类: 测试用例执行类,其中Text表示已文本形式输出测试结果.
    更多说明:

    1. verbosity<1的整数,输出结果中不提示执行成功的用例数.
    2. verbosity=1的整数,输出结果中仅以点(.)表示执行成功的用例数
    3. verbosity>1的整数,可以输出每个用例的详细信息
    4. TestRunner.run()方法会返回一个TestResult实例对象,该实例对象里存储着所有测试用例执行过程中的详细信息. 可以通过dir()方法查看该方法详情

    9.测试用例执行顺序
    默认是按照所有方法名的字符串的ASCII吗排序后执行的. 通常不符合我们的需求
    如果想按照我们自己设定顺序执行,方法如下:
    if__name__=='main':
    1> 启动单元测试
    unittest.main()
    2> 获取一个单元测试用例集TestSuite的实例对象suite
    suite=unittest.TestSuite()
    3> 将测试用例添加到测试容器中
    suite.addTest()
    例如:
    suite=addTest(MyTestClass("test_add"))
    suite=addTest(MyTestClass("test_sub"))
    suite=addTest(MyTestClass("test_mul"))
    suite=addTest(MyTestClass("test_div"))
    4>创建TextTestRunner类的实例对象
    runner = unittest.TextTestRunner()
    runner.run(suite)
    5.以上只是单线程执行测试, 不适用与多线程情况.

    10.忽略某个测试方法
    在想要忽略的方法上面加上注解/装饰器
    无条件忽略 @unittest.skip("skipping")
    有条件忽略
    如果变量a>5, 则忽略该测试方法. a是类里指定的值.
    @unittest.skipIf(a>5,"condition is satisfied ")
    除非执行测试用例的平台是window平台,否则忽略该测试方法
    @unittest.skipUnless(sys.platform.startswith("linux"),"requires Windows")

    1. 命令行执行测试用例
      unittest支持命令行模式运行测试模块,类,甚至单独有效的测试方法
      1通过命令直接运行整个模块
      命令格式: python -m unittest test_module1 test_modeule2 ...
      2.执行测试模块中的某个测试类
      命令格式: python -m unittest test_module.TestClass
      3.执行测试模块中某个类中的某个测试方法
      命令格式: python -m unittest test_module.TestClass.test_method

    使用命令执行测试用例前,必须切换到测试脚本存放目录,
    命令行中 -v 参数表示输出测试用例执行的详细信息,等价于verbosity=2

    1. 批量执行测试模块
      unittest可以自动发信并执行给定目录下满足规格的测试模块.
      规则是文件名必须是有效的标示符,文件名必须以test字符串开头,
      1.程序文件模式
      就是将测试发现代码编写再测试脚本中,然后直接执行脚本文件即可.
      2.命令行模式
      通过unittest单元测试框架提供的discover命令实现

    2. 常用的断言方法
      断言表示为一些布尔表达式
      判断程序是否达到预期
      断言为真,表示达到预期
      断言为假,表示未达预期
      unittest框架具有很大的断言,以assert***开头

    3. 使用HTMLTestRunner生成HTML测试报告
      前期准备
      1>下载HTMLTestRunner.py文件
      2>将该文件复制到Python安装路径下的lib文件夹中.
      3>进入Python文件或者交互模式,执行import HTMLTestRunner,没有报错,说明配置成功.
      4> 将测试结果报告写入指定的文件中

    相关文章

      网友评论

          本文标题:python单元测试框架

          本文链接:https://www.haomeiwen.com/subject/wblsiftx.html