数据驱动ddt框架1

时间:2021-01-27 14:04:25   收藏:0   阅读:0

@data()和@unpack

    @data((1,2),(3,4))
    @unpack
    def test2(self,dataa,data2):
        print(dataa,data2)

以上代码是想要生成两个测试用例,第一个用例把ddataa=1,data2=2,第二次用例把dataa=3,data2=4@data()括号中可以接受若干个参数传递给下方的方法中

在传数据的时候,@data()先看第一层括号中的元素,加@unpack时,data会把第一个括号中的所有元素按照第一层逗号分割,第一次把第一个数据当成第一组数据拆分后(此时数据数量取决于第一个数据里面的元素数量,所以一般来说每一组数据应该是能容纳多个数据的数据类型,比如元组列表字典)传到下方方法,第二个数据拆分后当成第二组数据传到下方方法…即:

第一次把(1,2)看作一组数据,由于有@unpack,并且元组(1,2)中的子元素有两个,第一次传递就是把int 1传递赋值给dataa,把int 2传递赋值给data2,作为第一次测试用例的数据

同理,第二次把元组(3,4)看作一组数据,本次传递把int 3传递赋值给dataa,把int 4传递赋值给data2,作为第二次测试用例的数据

每一组数据的数量(即元组(1,2)中子元素的数量)都应该对应下方函数的参数个数(dataa和data2).

 

不加@unpack,data会把第一层括号中的所有元素按照第一层逗号分隔,第一次把第一个数据传到下方方法的第二的参数,即

第一次把元组(1,2)传递赋值给dataa,不加@unpack时上述代码会报错,因为data2没有赋值

于是有一些结论:当方法有2个以上参数时,使用@data()不加@unpack是实现不了的

@unpack可以把每一组数据拆分,前提是这组数据可以拆分,就是说这组数据只能是元组列表字典--

另外上述代码也可以写成

tup1=((1,2),(3,4))
@data(*tup1)
@unpack
def test2(self,dataa,data2):
    print(dataa,data2)

 *意为把元素中的子元素按照顺序搬过来

但是假如变量tup1指向一个列表,需要写成@data(*(tup1))才能和上面功能相同

当用例方法参数大于2时,使用@data()和@unpack不方便,不如@file_data()

有一个比较特殊的使用方法:

 

    list1=[(1,2),(3,4),(5,6)]
    @data(*list1)
    @unpack
    def test4(self,data1,data2):
        print(data1,data2)

 

这种方法看似能实现:分3组数据,第一组1和2,第二组3和4,第三组5和6

但其实并不能实现,需要写成

    list1=[(1,2),(3,4),(5,6)]
    @data(*(list1))
    @unpack
    def test4(self,data1,data2):
        print(data1,data2)

不如@file_data()

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!