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

    • * 主要是对列表[]分解
    • ** 主要是对元组()分解
posted @ 2024-05-20 22:43  无心柳成荫  阅读(25)  评论(0编辑  收藏  举报