ddt数据驱动中unpack和*的区别
分析
在使用ddt导入数据的时候,会分别用到*解包和unpack,经常会把这两个认为是同一个用法,其实不是
// 我们定义一组CSV数据
null,测试数据,存放地点名称必填,请重新输入。
// 数据驱动
import csv
def readCsv():
with open("teatdata2.csv", encoding="utf-8") as f:
data = csv.reader(f)
tuple1 = []
for i in data:
tuple1.extend(i)
return tuple1
import unittest
from ddt import ddt, data, unpack
from csvv import readCsv
@ddt
class Test01(unittest.TestCase):
# 得到数据驱动返回的内容(原封不动)
@data(readCsv())
def test01(self,value):
print("test01",value)
# 把得到的数据拆开为多个(接受的变量数量=值的数量)(只执行一次)
@data(readCsv())
@unpack
def test02(self,name,test,exp):
print("test02",name,test,exp)
# 数据内的值依次输出(只有一个变量)(执行次数=变量数量)
@data(*readCsv())
def test03(self,value):
print("test03",value)
#依次取出数组里面嵌套的数组,再解开-->参数取决于数组的数组内的元素
@data(*readCsv())
@unpack
def test04(self,name,test,exp):
print("test03",name,test,exp)
if __name__ == '__main__':
unittest.main()
在遇到数据是嵌套的时候,如: [{1,2},{3,4},{5,6}]
可以使用: @data(*@readCsv()) #-->依次得到 {1,2}-->{3,4}-->{5,6}
之后使用:.@unpack .
- test一共会被执行三次(需要用两个变量来接收)
- #{1,2}--解开--> 1 和2
- #{3,4}--解开--> 3 和4
- #{5,6}--解开--> 5 和6
总结:
@unpack是当一次性要用到数组的全部内容的时候来解开为多个变量
*会依次的得到数据内每个下标的值.
当解开后需要使用全部数值的时候就要加上@unpack
- * 主要是对列表[]分解
- ** 主要是对元组()分解