ddt.file_data 实现数据驱动

ddt.file_data (参数是文件名。文件可以是json 或者 yaml类型)

 如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。下文两种类型的文件分别举一个例子。

 1、新建文件,文件内容是字典形式,testdata.json:

{
    "first":["{'name':'tom','age':15}","200"],
    "two":["{'name':'jack','age':18}","404"],
    "three":["{'name':'marry','age':8}","200"]
}

 

import json
import os
import unittest
from ddt import ddt,data,file_data,unpack

base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
file_path = os.path.join(base_dir,'data','testdata.json')

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

    @file_data(file_path)
    def testsii(self,data):
        con = json.dumps(eval(data[0]))
        status = data[1]
        print(type(con))        
        print(con)
        print(status)


if __name__ == '__main__':
    unittest.main(verbosity=2)

 执行结果:

test_01_1 (__main__.Mytest) ... 18
tom
18
北京丰台区马家堡小区
ok
test_01_2 (__main__.Mytest) ... 22
jack
12
北京朝阳区来广营
ok
test_01_3 (__main__.Mytest) ... 53
marry
22
北京海淀区中关村
ok

----------------------------------------------------------------------
Ran 3 tests in 0.004s

OK

 2、新建文件,文件内容为列表形式,testdata2.json

[
    {
        "id":18,
        "name":"tom",
        "age":18,
        "addr":"北京丰台区马家堡小区"
    },
    {
        "id":22,
        "name":"jack",
        "age":12,
        "addr":"北京朝阳区来广营"
    },
    {
        "id":53,
        "name":"marry",
        "age":22,
        "addr":"北京海淀区中关村"
    }
]

 

import os
import json
import unittest
from ddt import ddt,data,unpack,file_data


base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
file_path = os.path.join(base_dir,'data','testdata2.json')
with open(file_path,'r',encoding='utf-8') as fp:
    res = json.load(fp)


@ddt
class Mytest(unittest.TestCase):

    @data(*res)
    @unpack
    def test_01(self,id,name,age,addr):
        print(id)
        print(name)
        print(age)
        print(addr)

if __name__ == '__main__':
    unittest.main(verbosity=2)

 执行结果:

test_01_1 (__main__.Mytest) ... 18
tom
18
北京丰台区马家堡小区
ok
test_01_2 (__main__.Mytest) ... 22
jack
12
北京朝阳区来广营
ok
test_01_3 (__main__.Mytest) ... 53
marry
22
北京海淀区中关村
ok

----------------------------------------------------------------------
Ran 3 tests in 0.004s

OK

 

posted @ 2020-04-26 17:19  xiaosongbk  阅读(716)  评论(0)    收藏  举报