zoukankan      html  css  js  c++  java
  • 老鸟帮您解析——ddt数据驱动实现自动化测试

    一、什么是DDT数据驱动框架

    全称:data driver test数据驱动测试框架,可以完美的应用于unittest框架实现数据驱动。ddt使用简介:

    1.测试数据为多个字典的list类型

    2.测试类前加修饰@ddt.ddt

    3.用例前加修饰@ddt.data() 或 @ddt.file_data()

    4.运行后测试会自动加载成三个单独的用例

    注意:@data装饰符可以把参数当成测试数据,参数可以是单个值、列表、元祖、字典,对于列表和元祖需要使用@unpack装饰符把元祖和列表解析成多个参数。

    二、ddt数据驱动框架的安装和使用方式

    1.安装方式一:在dos窗口中使用命令:pip install ddt 安装    (建议用这种)

    验证是否安装成功:在dos命令中输入python进入python环境,然后输入import ddt,如果没有报错则说明安装成功!如下图所示:

    2.安装方式二:直接访问: https://pypi.org/project/ddt/#files 下载ddt源码( ddt-1.2.2.tar.gz  )。下载后解压,然后在dos命令中切换到setup.py所在目录,执行python setup.py install 进行安装。

    3.把ddt导入项目中。

    File->Settings->project:项目名->加号->输入ddt->install package

    4.ddt使用方式和常用模块

    使用方式:

    ddt是通过装饰器的形式来调用的

    ddt常用模块:

    @ddt(申明当前类使用ddt框架),

    @data(用于传参),

    @unpack(将参数解包,一般针对元组和列表),

    @data_file(ddt读取yaml/json文件)

    三、@ddt,@data,@unpack的基本使用方法。

    1.分别传入单个数字、字符串、元组、列表、集合、字典做一个案例。如:

    第一组案例:

    ```

    @ddt(100)
    
    def testcase1(self,name):
    
    print(name)
    
    @ddt('诸葛')
    
    def testcase1(self,name):
    
    print(name)
    
    @ddt(('诸葛','司马懿','韩信'))
    
    def testcase1(self,name):
    
    print(name)
    
    @ddt(['诸葛','司马懿','韩信'])
    
    def testcase1(self,name):
    
    print(name)
    
    @ddt({'诸葛','魏国':'司马懿','楚国':'韩信'})
    
    def testcase1(self,name):
    
    print(name)
    
    @ddt({'蜀国':'诸葛','司马懿','韩信'})
    
    def testcase1(self,name):
    
    print(name)
    ```

    第二组案例:使用@unpack对单个元组和列表解包。
    ```
    #unpack解析单个元组
    @data(('诸葛','司马'))
    @unpack
    def test1_data(self,args1,args2):
        print(args1,args2)
      
    #unpack解析单个列表 
    @data(['诸葛','司马'])
    @unpack
    def test2_data(self,args1,args2):
        print(args1,args2)
    ```

    2.分别传入多个数字、字符串、元组、列表、集合、字典做一个案例。如:

    第一组案例:

    代码可自己尝试:注意:查看运行结果,用例运行了多次。

    第二组案例:使用@unpack解包:多个元组和列表,如:

    ```

    #data传入多个元组,unpack对每个元组解析
    @data(('诸葛','司马'),('马超','关羽'))
    @unpack
    def test1_data(self,args1,args2):
        print(args1,args2)
        
    #data传入多个列表,unpack对每个列表解析
    @data(['诸葛','司马'],['马超','关羽'])
    @unpack
    def test1_data(self,args1,args2):
        print(args1,args2)
    ```

    注意:

    (1) 如果传入:[('诸葛','司马'),('马超','关羽')],则@unpack解析后得到('诸葛','司马')和('马超','关羽'),需要两个参数接收,用例只执行一次,所以得出@unpack解析最外层的元祖或列表。

    (2) 如果传入的是字典列表(list of dict) 分解的参数名必须跟键名一致。

    如果你此文你也有同感,如果你觉得此文对你有帮助,加入我们,642830685。群,领取最新大厂面试资料、Python自动化、接口、框架搭建等资料

     

     

     

  • 相关阅读:
    搜索自动提示的简单模拟JQuery
    log4j+AOP 记录错误日志信息到文件中
    利用firebug 查看JS方法, JS 调试
    Blog 使用Jsoup解析出html中的img元素
    jquery操作select(取值,设置选中)
    C++解析(20):智能指针与类型转换函数
    C++解析(19):函数对象、关于赋值和string的疑问
    C++解析(18):C++标准库与字符串类
    C++解析(17):操作符重载
    C++解析(16):友元与类中的函数重载
  • 原文地址:https://www.cnblogs.com/www642830685/p/13266451.html
Copyright © 2011-2022 走看看