zoukankan      html  css  js  c++  java
  • Unittest框架/DDT数据驱动

    介绍前,思考以下问题

    • 测试数据如何自动化清除(运行前和运行后)
    • 多个测试用例,如何组织在一起执行
    • 多个测试用例的结果,如何展示在一份报告上

    01:什么是Unittest

    是python自带的单元测试框架(不需要安装),主要适用于单元测试,可以对多个测试用例进行管理和封装

    Unittest也叫pyunit,它提供了很多类和方法来处理各种测试工作

    单元测试-用一部分代码测试另一部分代码

    02:四大功能组成

    (一)测试用例----testcase 

      • 测试用例必须在类中
      • 测试用例所在的类,必须继承Unittest.TestCase
      • 测试用例的方法名称必须以test开头
      • 测试用例的执行顺序,按照Ascill码顺序(0~9,A~Z,a~z)
      • 利用父类TestCase的assertXXXX方法来断言
      • 用@unittest.skip(reason)装饰来跳过测试用例

    (二)测试固件----testfixture

      • 也叫测试夹件,主要工作是【初始化和善后】
      • 测试固件分为两种,一种是类级别的,一种是方法级别的
      • 类级别的测试固件,所有测试用例执行之前与之后运行一次
      • 方法级别的测试固件,每个测试用例执行之前与之后都运行一次

    1.示例一代码(方法级别):

    运行结果(鼠标顶格运行 ):

    2.示例二代码(类级别):

    运行结果:

    3.断言assert

    断言失败的话,用例2之后的测试用例不执行

    由此得出Unittest缺点--不能批量执行测试用例

    改造Unittest自己的assert:self.assertEqual

    报错后可继续执行下面的用例,且打印到测试报告中

    4.跳过某个测试用例 

    使用@unittest.skip(reason)装饰

    (三)测试套件----testsuite

      • 是用来组织测试用例的
      • 如:

    方法一:用例逐个添加到suite

    import unittest
    # 1构建测试套件test_suite
    # 1-1 方法一:逐个添加到suite
    suit = unittest.TestSuite()
    suit.addTest(UnittestDemo('test_001'))
    suit.addTest(UnittestDemo('test_002'))

    方法二:用例放入列表中,再添加到suite

    suite = unittest.TestSuite()
    list=[类名1("方法名1"),类名2("方法名2")]
    suite.addTests(list)
    
    例:
    list=[UnittestDemo('test_001'),UnittestDemo('test_002')]
    suite.addTests(list)

    方法三:通过TestLoader类的discover 方法来

    suite = unittest.defaultTestLoader.discover('用例所在的模块', pattern="*通配*.py")

    discover(start_dir,pattern='test*.py',top_level_dir=None)

    -case_dir:这个是待执行用例的目录。

    -pattern:这个是匹配脚本名称的规则,test*.py 意思是匹配 test 开头的所有脚本。

    -top_level_dir:这个是顶层目录的名称,一般默认等于 None 就行了。

    (四)测试运行器----testrunner

    • 是用来执行测试用例的
    • 第一种输出方法
    runner=unittest.TextTestRunner() #实例化TestRunner类
    runner.run(suite)#执行用例

    03: HTMLTestRunner--输出报告

    ClassicHTMLTestRunner下载解压

    放在此下目录,整个项目可通用

    导入:

    from ClassicHTML.TestRuner  import HTML.TestRunner

    • 第二种输出方法,使用HTMLTestRunner
    runner = HTML.TestRunner(tester = '测试报告人','title'='测试报告',
                             description='接口测试报告'.stream = '文件路径',verbosity=2#详细描述)
    runner.run(suite)

    04:DDT数据驱动

    解决问题:如何解决批量运行问题

    ddt官方文档地址:https://pypi.org/project/ddt/

    安装:

    pip install ddt

    ​导入:

    from ddt import ddt,data,unpack
    • ddt.ddt:装饰类,也就是继承TestCase的类。
    • ddt.data:装饰测试方法,参数是一系列的值。
    • ddt.unpack:传递的是复杂的数据结构时使用,比如使用列表或者元组,添加unpack后,ddt会自动把元组或者列表对应到多个参数上

    代码中加入:

    @ddt #类上面加上ddt
    class UnittestDemo(unittest.TestCase):
    #测试用例
    @data(放参数)
    def test_005(self,data):

     

  • 相关阅读:
    WP7 操作XML文件
    C#和C/C++指针实现swap交换
    感受
    我学到了什么 我思考了什么.
    hdu 2768 Cat vs. Dog (最大独立)
    hdu 1960 Taxi Cab Scheme (最小覆盖)
    hdu 1528 Card Game Cheater (最小覆盖)
    hdu 4160 Dolls (最大独立)
    hdu 2458 Kindergarten (最大独立集)
    hdu 2119 Matrix (最小覆盖)
  • 原文地址:https://www.cnblogs.com/kelly11/p/12821404.html
Copyright © 2011-2022 走看看