ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

自动化框架——PO设计模式自学——参数化配置——tdd数据驱动——python数据处理之 ddt,@data, @unpack(转载)

2020-04-04 14:05:14  阅读:319  来源: 互联网

标签:python unpack unittest ddt print test 设计模式 data


python 的unittest 没有自带数据驱动功能。

所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成。

DDT是 “Data-Driven Tests”的缩写,包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(可以从json或者yaml中获取测试数据)


【通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据】

说明:

@ddt 读取单个测试数据:-----装饰测试类,继承自TestCase的类

@data()---装饰测试方法,拿到几个数据数据就执行几条用例(可以以“*变量”传入括号;也可以直接括号放入数值,逗号隔开)

    @data(a,b)    ------那么a和b各运行一次用例

    @data([a,d],[c,d])  -----如果没有unpack,那么[a,b]当成一个参数传入用例运行;如果有unpack,那么[a,b]被分解开,按照用例中的两个参数传递

    @file_data(filename)   ----对于json的文件,每一个json元素按照一个用例运行,可以依照python分解元组,列表或者字典的方式分解传入

@unpack  ----解包,使用复杂的数据结构时,与此同时,测试方法的参数需要多个(参数的传值个数与解包后数量必须一一对应,“可以考虑用None”)

        如果test_data的值很多(大于5)不建议使用unpack,可以考虑直接列表传出,索引取值(要注意参数不对等的情况)

 

【注意】使用请先导包

1.传列表

import  unittest
from ddt import  ddt,data,unpack
复制代码
import  unittest
from ddt import  ddt,data,unpack

test_data=[1,3]
@ddt
class TestMath(unittest.TestCase):
    def setUp(self):
        pass

    @data(*test_data)   #脱外套只能一层
    def test_print_data(self,item):
        print(item)
复制代码 复制代码
import  unittest
from ddt import  ddt,data,unpack

test_data=[[1,3],[4,5]]
@ddt
class TestMath(unittest.TestCase):
    def setUp(self):
        pass

    @data(*test_data)
    @unpack    #在“脱外套”之后,针对你拿到的每一条数据根据逗号进行拆分
    def test_print_data(self,a,b):  #需要按拆出来的每条数据内的个数进行传参
        print(a)
        print(b)
复制代码

 

2.列表嵌套字典

如果需要对字典进行unpack 参数名需要与你的字典key对应

复制代码
import  unittest
from ddt import  ddt,data,unpack

test_data=[{'no':1,'name':'小李'},{'no':2,'name':'小张'}]
@ddt
class TestMath(unittest.TestCase):
    def setUp(self):
        pass

    @data(*test_data)
    def test_print_data(self,a):  #需要按拆出来的每条数据内的个数进行传参
        print(a['no'])
        print(a['name'])
复制代码

 

复制代码
import  unittest
from ddt import  ddt,data,unpack
test_data=[{'no':1,'name':'小李'},{'no':2,'name':'小张'}]

@ddt
class TestMath(unittest.TestCase):
    def setUp(self):
        pass

    @data(*test_data)
    @unpack    #在“脱外套”之后,针对你拿到的每一条数据根据逗号进行拆分
    def test_print_data(self,no,name):  #需要按拆出来的每条数据内的个数进行传参
        print(no)
        print(name)
复制代码

 

如果需要对字典进行unpack 参数名需要与你的字典key对应

复制代码
import  unittest
from ddt import  ddt,data,unpack
test_data=[{'no':1,'name':'小李'},{'no':2,'name':'小张'}]

@ddt
class TestMath(unittest.TestCase):
    def setUp(self):
        pass

    @data(*test_data)
    @unpack    #在“脱外套”之后,针对你拿到的每一条数据根据逗号进行拆分
    def test_print_data(self,a,b):  #需要按拆出来的每条数据内的个数进行传参
        print(a)
        print(b)

#结果会报错,参数名需要与你的字典key对应

标签:python,unpack,unittest,ddt,print,test,设计模式,data
来源: https://www.cnblogs.com/xiaobaibailongma/p/12631569.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有