• python应用(五、自动化测试框架-Unittest)


    5、自动化测试框架-Unittest
    参考:https://www.bilibili.com/video/BV1xJ411v7Eb?p=1
    5.1 Unittest简介
    Unittest是Python内部自带的一个单元测试的模块,它设计的灵感来源于Junit,具有和Junit类似的结构。Unittest具备完整的测试结构,支持自动化测试的执行,对测试用例集进行组织,并且提供了丰富的断言方法,最后生成测试报告。

    5.2 重要概念
    在继续学习之前,我们需要掌握四个Unittest的重要概念:
    (1) test fixture:翻译过来是测试固定装置的意思。形象的说,把整个测试过程看作大的装置,这个装置里不仅具有测试执行部件,还有测试之前环境准备和测试之后环境清理的部件,有机的结合起来就是一个更大的测试装置,即test fixture。

    (2) test case:测试用例,注意与前面的TestCase类不是同一个概念。一个完整的测试流程就是一个测试用例,通过一些特定的输入得到响应,并对响应进行校验的过程。我们通过去继承TestCase这个父类,可以创建新的测试用例。

    (3) test suite:测试套件,也称为测试集合。多个测试用例组合在一起就形成了测试集,当然测试集里不仅能包含测试用例,也可以再次嵌套测试集,测试集可以用于代码的组织和运行。

    (4) test runner:是Unittest中的重要组成部分,主要职责为执行测试,通过图形、文本或者返回一些特殊值的方式来呈现最终的运行结果。例如执行的用例数、成功和失败的用例数。

    5.3 测试框架代码



    运行结果:

    5.4 执行过程
    1)导入unittest模块。
    2)定义一个测试类(例如:forTest),必须继承于unittest.TestCase类。
    3)可以创建类方法setUpClass,这个类方法在代码中不需调用,执行代码时会首先执行该代码,实现类的初始化功能
    4)可以创建类方法tearDownClass,这个类方法在代码中不需调用,执行代码时会最后执行该代码,实现类资源的释放
    5)类的代码中可以正常定义和使用:变量和方法
    6)可以创建方法setUp,这个类方法在代码中不需调用,该代码会在每条测试用例执行前执行,实现测试用例的初始化功能(前置条件)
    7)可以创建方法tearDown,这个类方法在代码中不需调用,该代码会在每条测试用例执行后执行,实现测试用例数据处理和资源释放(后置条件)
    8)类中测试用例方法必须以test_xxx来命名,这样unittest才能正确将其识别成测试用例。测试用例不按代码先后顺序执行,按测试用例的方法名排序:0-9->A-Z->a-z。
    9)在main函数中只能写入unittest.main(), unittest.main()会自动按顺序执行测试类(继承于unittest.TestCase类)中的代码。

    5.5 数据驱动ddt
    ddt(data-driven test),数据驱动测试。
    1)安装ddt:pip install ddt

    2)基本使用:
    (1)使用@ddt装饰测试类;
    (2)测试类中必须有setUp和tearDown两个方法;
    (3)基于实际应用,选择对应的装饰器

    3)@data装饰器,传入参数,并使测试用例执行多次,每次传参以“,”为界。

    使用列表传递参数

    4)@unpack装饰器,可以传入多个参数
    @unpack装饰器会将@data装饰器中的元组(或列表)按顺序拿出来,将元组(或列表)解包后,传给测试用例中的形参。

    执行结果:

    5)通过读取文件,上传参数

    5.6 yml文件操作
    1)安装
    pip install PyYaml

    2)导入
    import yaml

    3)yml文件书写格式

    4)@file_data装饰器,用于读取yml文件的装饰器
    yml数据文件中的数据以键值对来存储,格式很重要。

    5.7 Unittest断言:saaert
    TestCase类已经提供了封装好的断言方法进行断言校验。


    Case2失败,并打印错误信息。

    Unittest常用断言

    5.8 跳过:Unittest skip()
    当测试用例写完后,有些模块有改动时候,会影响到部分用例的执行,这个时候我们希望暂时跳过这些用例。
    或者前面某个功能运行失败了,后面的几个用例是依赖于这个功能的用例,如果第一步就失败了,后面的用例也就没必要去执行了,直接跳过就行,节省用例执行时间。
    可以使用skip装饰器,实现用例跳过的功能。
    1)skip装饰器一共有四个:
    (1)@unittest.skip(reason)
    无条件跳过用例,reason是说明原因
    (2)@unittest.skipIf(condition, reason)
    condition为true的时候跳过
    (3)@unittest.skipUnless(condition, reason)
    condition为False的时候跳过
    (4)@unittest.expectedFailure
    如果测试用例失败了,这个用例不计入失败的case数目,按跳过处理,不报错,只反馈错误信息。
    如果测试用例成功,会报错。

    2)编写代码


    如果注释掉用例4前的装饰器,测试结果如下:

    5.9 测试套件(Suite)和Runner
    测试框架内的测试用例执行时,不按代码前后位置执行,而是按测试用例名称执行。
    测试用例执行顺序:0-9->A-Z->a-z
    1)测试套件Suite作用:
    (1)用于给测试用例排序
    (2)多种方式添加测试用例

    2)测试套件Suite用法:
    (1)addTest():将测试用例加入测试套件。

    注意:如果将for_suite模块中的代码复制到skip_001模块的main函数中,并且在skip_001文件中运行,是无法实现测试用例排序的。skip_001运行时,依旧会按照文件名的顺序来运行。
    (2)addTests():将列表加入测试测试用例套件

    (3)discover():发现指定目录下的多个测试文件(*.py)

    (4)TestLoader():载入多个测试用例
    (a)TestLoader().loadTestsFromTestCase()

    (b)TestLoader().loadTestsFromName()

    5.10 测试报告:HtmlTestRunner
    1)安装环境
    pip install html-testRunner

    2)导包
    from HtmlTestRunner import HTMLTestRunner

    3)使用
    测试完成后,会生成测试报告,报告名称

    使用浏览器打开测试报告:

    5.11 unittest支持cmd命令行运行
    1)python -m unittest test1 test2
    这里指的是按顺序执行test1.py test2.py文件中的unittest模块。
    2)python -m test1.TestStringMethods
    这里指的是执行test1.py文件中名为TestStringMethods的unittest类。
    3)python -m unittest test1.TestStringMethods.test_split
    这里指的是只执行test1.py文件中名为TestStringMethods的unittest类的test_split函数。
    4)python -m unittest
    这里指的是编译该层目录下继承unittest模块的所有py文件。
    5)python -m unittest discover
    等同于python -m Unittest,后还要接参数时要加discover。
    6)python -m unittest discover -s dest_Dir -p "*.py"
    编译目标dir目录下继承unittest模块的所有py文件,其中-s 后接对应文件夹,-p 后接匹配模式。

  • 相关阅读:
    典型并发任务
    第九章使用共享变量实现并发
    第八章goroutine和通道
    第七章接口
    第六章方法
    第一章
    第四章复合数据类型
    第三章基础数据类型
    Django其他
    VUE学习日记(五) ---- 组件定义 component
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14180008.html
Copyright © 2020-2023  润新知