zoukankan      html  css  js  c++  java
  • Python数据驱动工具——DDT

    参考链接1:https://www.cnblogs.com/miniren/p/7099187.html

    参考链接2:https://www.imooc.com/article/14861

    1、安装ddt模块:cmd命令下:pip install ddt
    2、用途:结合单元测试unittest去执行用例
    3、本质:类的装饰器
    4、python 的unittest 没有自带数据驱动功能。所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成

    import unittest
    import ddt
    test_case=[{'case_id':1,'title':'正常登录','url':'http://ip:9999/futureloan/mvc/api/member/login','data':{'mobilephone':'13417467890','pwd':'123456'},'method':'get','expected':'10001'},
               {'case_id':2,'title':'密码错误','url':'http://ip:9999/futureloan/mvc/api/member/login','data':{'mobilephone':'13417467890','pwd':'12345678'},'method':'get','expected':'20111'},
               {'case_id':3,'title':'手机号错误','url':'http://ip:9999/futureloan/mvc/api/member/login','data':{'mobilephone':'13417467890666','pwd':'123456'},'method':'get','expected':'20111'},
               {'case_id':4,'title':'密码为空','url':'http://ip:9999/futureloan/mvc/api/member/login','data':{'mobilephone':'13417467890','pwd':''},'method':'get','expected':'20103'},
               {'case_id':5,'title':'手机号为空','url':'http://ip:9999/futureloan/mvc/api/member/login','data':{'mobilephone':'','pwd':'123456'},'method':'post','expected':'2013'}]
    @ddt.ddt
    class TestCase(unittest.TestCase):
    
        @ddt.data(test_case)
        def test01(self,data):
            print('-----------用例1-----------')
            print('data:',data)
            # -----------用例1-----------
            # data: [{'method': 'get', 'case_id': 1, 'data': {'pwd': '123456', 'mobilephone': '13417467890'}, 'url': 'http://ip:9999/futureloan/mvc/api/member/login', 'title': '正常登录', 'expected': '10001'}, {'method': 'get', 'case_id': 2, 'data': {'pwd': '12345678', 'mobilephone': '13417467890'}, 'url': 'http://192.168.135.128:9999/futureloan/mvc/api/member/login', 'title': '密码错误', 'expected': '20111'}, {'method': 'get', 'case_id': 3, 'data': {'pwd': '123456', 'mobilephone': '13417467890666'}, 'url': 'http://192.168.135.128:9999/futureloan/mvc/api/member/login', 'title': '手机号错误', 'expected': '20111'}, {'method': 'get', 'case_id': 4, 'data': {'pwd': '', 'mobilephone': '13417467890'}, 'url': 'http://192.168.135.128:9999/futureloan/mvc/api/member/login', 'title': '密码为空', 'expected': '20103'}, {'method': 'post', 'case_id': 5, 'data': {'pwd': '123456', 'mobilephone': ''}, 'url': 'http://192.168.135.128:9999/futureloan/mvc/api/member/login', 'title': '手机号为空', 'expected': '2013'}]
    
    
        @ddt.data(*test_case) #@data装饰方法,  加上* 拆分一层(按逗号拆分)
        def test_02(self,data):
             print('-----------用例2-----------')
             print('data:',data)
            # -----------用例2-----------
            # data: {'data': {'mobilephone': '13417467890', 'pwd': '123456'}, 'url': 'http://ip:9999/futureloan/mvc/api/member/login', 'method': 'get', 'expected': '10001', 'case_id': 1, 'title': '正常登录'}
            # -----------用例2-----------
            # data: {'data': {'mobilephone': '13417467890', 'pwd': '12345678'}, 'url': 'http://ip:9999/futureloan/mvc/api/member/login', 'method': 'get', 'expected': '20111', 'case_id': 2, 'title': '密码错误'}
            # -----------用例2-----------
            # data: {'data': {'mobilephone': '13417467890666', 'pwd': '123456'}, 'url': 'http://ip:9999/futureloan/mvc/api/member/login', 'method': 'get', 'expected': '20111', 'case_id': 3, 'title': '手机号错误'}
            # -----------用例2-----------
            # data: {'data': {'mobilephone': '13417467890', 'pwd': ''}, 'url': 'http://ip:9999/futureloan/mvc/api/member/login', 'method': 'get', 'expected': '20103', 'case_id': 4, 'title': '密码为空'}
            # -----------用例2-----------
            # data: {'data': {'mobilephone': '', 'pwd': '123456'}, 'url': 'http://ip:9999/futureloan/mvc/api/member/login', 'method': 'post', 'expected': '2013', 'case_id': 5, 'title': '手机号为空'}
    
    
    
        @ddt.data(*test_case)  #拆分后的数据是字典格式
        @ddt.unpack    #在@data拆分的基础上,再拆分一次,并用等量的变量接收这些数据(如果是字典,需要用key)
        def test_03(self,case_id,title,url,data,method,expected):  #字典格式的数据再次拆分,参数要和测试用例的key一样
            print('-----------用例3-----------')
            print('case_id:',case_id)
            print('title:',title)
            print('url:',url)
            print('data:',data)
            print('method:',method)
            print('excepted:',expected)
    
    # -----------用例3-----------
    # case_id: 1
    # title: 正常登录
    # url: http://ip:9999/futureloan/mvc/api/member/login
    # data: {'mobilephone': '13417467890', 'pwd': '123456'}
    # method: get
    # excepted: 10001
    # -----------用例3-----------
    # case_id: 2
    # title: 密码错误
    # url: http://ip:9999/futureloan/mvc/api/member/login
    # data: {'mobilephone': '13417467890', 'pwd': '12345678'}
    # method: get
    # excepted: 20111
    # -----------用例3-----------
    # case_id: 3
    # title: 手机号错误
    # url: http://ip:9999/futureloan/mvc/api/member/login
    # data: {'mobilephone': '13417467890666', 'pwd': '123456'}
    # method: get
    # excepted: 20111
    # -----------用例3-----------
    # case_id: 4
    # title: 密码为空
    # url: http://ip:9999/futureloan/mvc/api/member/login
    # data: {'mobilephone': '13417467890', 'pwd': ''}
    # method: get
    # excepted: 20103
    # -----------用例3-----------
    # case_id: 5
    # title: 手机号为空
    # url: http://ip:9999/futureloan/mvc/api/member/login
    # data: {'mobilephone': '', 'pwd': '123456'}
    # method: post
    # excepted: 2013
    if __name__ == '__main__':
        unittest.main()
    

      

  • 相关阅读:
    两个栈实现队列
    重建二叉树
    最大的K个数
    堆排序
    Android 强制竖屏
    屏蔽输入框的焦点
    Android 全屏显示的方法(不包含状态栏)
    android 布局之scrollview
    clean之后R文件消失
    thinkphp
  • 原文地址:https://www.cnblogs.com/yhms/p/10316405.html
Copyright © 2011-2022 走看看