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

浙公网安备 33010602011771号