指在自动化测试中处理测试数据的方式。通常测试数据与功能函数分离,存储在功能函数的外部位置。在自动化测试运行时,数据驱动框架会读取数据源中的数据,把数据作为参数传递到功能函数中,并会根据数据的条数多次运行同一个功能函数。
pip install ddt
1、使用 @ddt 装饰你的测试类;
2、使用 @data 或者 @file_data 装饰你需要数据驱动的测试方法;
3、如一组测试数据有多个参数,则需 unpack,使用 @unpack 装饰你的测试方法。
4、file_data 装饰器则从 JSON 或 YAML 文件加载测试数据。
示例1:
import unittest
from ddt import ddt, data, unpack, file_data
from conifg import base_path
datas = [{"user": "admin", "psw": "123456", "result": "true"},
{"user": "admin_001", "psw": "123456", "result": "true"},
{"user": "admin_002", "psw": "123456", "result": "true"},
{"user": "admin_003", "psw": "123456", "result": "true"},
{"user": "admin_004", "psw": "123456", "result": "true"}, ]
data1 = {
"test_data": [
{
"param1": 1,
"param2": 2,
"expect": 3
},
{
"param1": 2,
"param2": 3,
"expect": 5
},
{
"param1": 3,
"param2": 4,
"expect": 7
}
]
}
@ddt
class Test(unittest.TestCase):
# *data (*的含义是解包的含义,通过* 解包出多条测试数据 )
@data(*data1.get("test_data"))
def test_1_demo(self, case):
print(case)
@data(*data1.get("test_data"))
@unpack
# @unpack
# unpack表示,对于每一组数据,如果它的值是list或者tuple,那么就分拆成独立的参数。
def test_2_demo(self, param1, param2, expect):
print("param1:", param1, end=" ")
print("param2:", param2, end=" ")
print("expect:", expect, end=" ")
if __name__ == "__main__":
unittest.main()
结果显示:
{'param1': 1, 'param2': 2, 'expect': 3}
{'param1': 2, 'param2': 3, 'expect': 5}
{'param1': 3, 'param2': 4, 'expect': 7}
param1: 1 param2: 2 expect: 3 param1: 2 param2: 3 expect: 5 param1: 3 param2: 4 expect: 7
示例2:
import unittest
from ddt import ddt,data
@ddt
class Test(unittest.TestCase):
# 如果是字典想获取 key 与 value 可以使用items()方法
@data(*{"name":"zhangsan","age":12}.items())
def test_aa(self, case):
print(case)
if __name__ == "__main__":
unittest.main()
显示结果:
('name', 'zhangsan')
('age', 12)
一、ddt.file_data介绍
二、为什么要用ddt,希望数据和用例分开,没什么耦合性
from ddt import ddt, file_data
import unittest
@ddt
class Test(unittest.TestCase):
@file_data("D:\work_doc\CodeFile\dcs_class6\data.json")
def test01(self, username, password):
print(username, password)
if __name__ == '__main__':
unittest.main()
# 运行结果如下
"""
Ran 3 tests in 0.004s
Evan 123456
Lvan 123456
Alex 123456
"""
import yaml
f = open("ddt_data.yaml", encoding="utf8")
print(yaml.load(f))
f.close()
# 运行结果如下
"""
[{
'url': 'http://cms.duoceshi.cn/xxx/xxxx/xxxxx',
'method': 'post',
'header': {'Content-Type': 'application/x-www-form-urlencoded'},
'params': {'userAccount': 'admin', 'loginPwd': 123456}
}]