数据驱动ddt
数据驱动ddt可以实现测试数据与测试脚本的分离,通过ddt来将测试数据加载到脚本中。采用数据驱动设计模式使一组数据对应一个测试用例,用例自动加载生成
在执行测试用例时,有些用例只是参数不一致。比如登录操作。
如果用例重复去写操作过程会增加代码量
对应这种多组数据的测试用例,可以用数据驱动设计模式,一组数据对应一个测试用例,用例自动加载生成
ddt基础
- 安装ddt
pip install ddt
- 测试数据为多个字典的list类型
- 测试类前加修饰@ddt.ddt
- 测试用例前加修饰@ddt.data()
- 运行后用例会自动加载成三个单独的用例
#coding:utf-8
import ddt
import unittest
testdata = [{"username":"wangm","password":1234567},
{"username":"WXK","password":1234567},
{"username":"Wyyy","password":1234567},
{"username":"WANGMIN","password":1234567}]
@ddt.ddt
class Test(unittest.TestCase):
def setUp(self):
print("开始")
def tearDown(self):
print("结束")
@ddt.data(*testdata)
def test_ddt(self,data):
print(data)
if __name__ =="__main__":
unittest.main()
unittest结合ddt数据驱动
#coding:utf-8
import requests
import unittest
import ddt
from login import get_login
testdata = [{"username": "wangm", "password": 1234567, "token":get_login()},
{"username": "wangm", "password": 123, "token":get_login()},
{"username": "wang", "password": 1234567,"token":get_login(),},
{"username":"xiaohong","password":123,"token":get_login()},
{"username":"admin","password":123454321,"token":get_login()}
]
@ddt.ddt
class post_request(unittest.TestCase):
def setUp(self):
print("开始")
self.post_url = ''
self.header = {
"Accept": "application/json, text/plain, */*",
"Accept - Encoding": "gzip, deflate",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Cookie": "Hm_lvt_d93b15658f1430688541cac7600553c6 = 1614989285, 1615162008, 1615247795, 1615365764;Hm_lpvt_d93b15658f1430688541cac7600553c6 = 1615366477"
}
@ddt.data(*testdata)
def test_post_DL(self,data1):
url = self.post_url
header = self.header
data = data1
r =requests.post(url=url,headers=header,data=data)
print(r.status_code)
print(r.text)
def tearDown(self):
print("结束")
pass
if __name__ =="__main__":
unittest.main()
使用json或yaml文件
@ddt.file_data('C:\\Users\\Kst\\PycharmProjects\\接口自动化\\test_case\\DLL.json')
@ddt.unpack
def test_01_DLL(self,a):
url = self.url
header = self.header
data = a
r = requests.post(url=url,headers=header,data=data)
print(r.status_code)
print(r.text)
[{"username": "wangm", "password": 1234567, "token": "81e3ae48fdc7422cb1bfea6700c084c3000000001386"},
{"username": "wangm", "password": 123, "token": "81e3ae48fdc7422cb1bfea6700c084c3000000001386"},
{"username": "wang", "password": 1234567, "token": "81e3ae48fdc7422cb1bfea6700c084c3000000001386"},
{"username": "xiaohong", "password": 123, "token": "81e3ae48fdc7422cb1bfea6700c084c3000000001386"},
{"username": "admin", "password": 123454321, "token": "81e3ae48fdc7422cb1bfea6700c084c3000000001386"}]