标签:code ack 用例 col highlight 传递 nbsp 使用 数据驱动
@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()
标签:code ack 用例 col highlight 传递 nbsp 使用 数据驱动
原文地址:https://www.cnblogs.com/lqs244/p/14287874.html