ddt 結合單元測試一起用
ddt(data.driven.test):數據驅動測試
由外部數據集合來驅動測試用例
核心的思想:數據和測試代碼分離
應用場景:一組數據來執行相同的操作
當測試數據發生大量變化的情況下測試代碼,(或者說測試用例)可以保持不變
excel存儲測試數據,ddt讀取測試數據到 單元測試框架(測試用例中)-輸出到html報告
python.ddt框架
安裝:pip install ddt
使用之前先導入ddt
import ddt
ddt結合單元測試來使用
1.在測試類定義定義之前使用:@ddt.ddt
2.在測試用例定義之前使用,@ddt.data(測試數據) 測試數據之間用逗號隔開
3.在2的基礎上定義測試用例時,參數接收2中的測試數據
例:
@ddt.ddt
class Demo Test(unittest.TestCase):
@ddt.data(2,3,4)
def test_print(self,a)
print("簡單調用@data查看輸出的是什么?",a)
例子
import ddt
import unittest
@ddt.ddt
class test_PersonInfo(unittest.TestCase):
@classmethod
def setUp(self):
print("==========開始測試==========")
@classmethod
def tearDown(self):
print("==========結束測試==========")
@ddt.data(1,2,3,4)
def test_print(self,a):
print(a)
ddt-data 數據
一組數據之間用逗號隔開
data的參數可以為如下幾種
1.一組數據中,每個數據為單個值
2.一組數據中,每個數據為一個列表或者一個字典
3.文件對象:jason,yaml
一組數據中的數據為列表或者字典:
@data([a,b],[c,d])
如何從以上數據中獲取到字典中每一項值
@unpack
若變量A=[{a:b,a1:b1},{c:d,c1:d1}]
如何將變量A中的每一組元素作為測試數據
@ddt.data(*A)
import ddt
import unittest
@ddt.ddt
class test_PersonInfo(unittest.TestCase):
@classmethod
def setUp(self):
print("==========開始測試==========")
@classmethod
def tearDown(self):
print("==========結束測試==========")
@ddt.data([1,2],[3,4])
def test_print(self,a):
print(a)
==========開始測試==========
[1, 2]
==========結束測試==========
==========開始測試==========
[3, 4]
==========結束測試==========
print(a[0])
==========開始測試==========
1
==========結束測試==========
==========開始測試==========
3
==========結束測試==========
@ddt.data([1,2],[3,4])
@ddt.unpack
def test_print(self,a,b):
print(a,b)
==========開始測試==========
1 2
==========結束測試==========
==========開始測試==========
3 4
==========結束測試==========
@ddt.data([{"a":2,"b":3},{"c":4,"d":8},{"e":5,"f":7}])
def test_print(self,a):
print(a)
==========開始測試==========
[{'a': 2, 'b': 3}, {'c': 4, 'd': 8}, {'e': 5, 'f': 7}]
==========結束測試==========
@ddt.data(*datas)
def test_print(self,datas):
print(datas)
==========開始測試==========
{'class': 'python2', 'name': 'xiaoshitou', 'id': '0001', 'sex': 'male'}
==========結束測試==========
==========開始測試==========
{'class': 'python2', 'name': 'nuonuo', 'id': '0002', 'sex': 'female'}
==========結束測試==========
==========開始測試==========
{'class': 'python2', 'name': 'fly', 'id': '0003', 'sex': 'male'}
==========結束測試==========
==========開始測試==========
{'class': 'python2', 'name': 'haiyang', 'id': '0004', 'sex': 'male'}
==========結束測試==========
==========開始測試==========
{'class': 'python2', 'name': 'shuangshuang', 'id': '0005', 'sex': 'female'}
==========結束測試==========
dat-data數據
數據為文件對象:Json yaml
json格式里面必須為雙引號“”,且必須為鍵值對,不存在純列表格式,值作為測試數據
{"name":"nick","gender":"male","age":29}
@ddt.file_data(jason文件路徑)
@ddt.file_data(os.getcwd()+"/test.json")
def test_json(self,data):
print(data)
==========開始測試==========
[1, 2, 3]
==========結束測試==========
==========開始測試==========
python2
==========結束測試==========
==========開始測試==========
male
==========結束測試==========
==========開始測試==========
xiaoshitou
==========結束測試==========
==========開始測試==========
0001
==========結束測試==========