python中的ddt用法


轉載自:https://www.jianshu.com/p/78998bcf3e05

一般進行接口測試時,每個接口的傳參都不止一種情況,一般會考慮正向、逆向等多種組合。所以在測試一個接口時通常會編寫多條case,而這些case除了傳參不同外,其實並沒什么區別。
這個時候就可以利用ddt來管理測試數據,提高代碼復用率。
※但要注意:正向和逆向的要分開寫※

安裝:pip install ddt
四種模式:第一步引入的裝飾器@ddt;導入數據的@data;拆分數據的@unpack;導入外部數據的@file_data

1、讀取元組數據

#一定要和單元測試框架一起用 import unittest,os from ddt import ddt,data,unpack,file_data '''NO.1單組元素''' @ddt class Testwork(unittest.TestCase): @data(1,2,3) def test_01(self,value): #value用來接收data的數據 print(value) if __name__ == '__main__': unittest.main() 結果: =>1 2 3 '''NO.2多組未分解元素''' @ddt class Testwork(unittest.TestCase): @data((1,2,3),(4,5,6)) def test_01(self,value): print(value) if __name__ == '__main__': unittest.main() 結果: =>(1, 2, 3) (4, 5, 6) '''NO.3多組分解元素''' @ddt class Testwork(unittest.TestCase): @data((1,2,3),(4,5,6)) @unpack #拆分數據 def test_01(self,value1,value2,value3): #每組數據有3個值,所以設置3個形參 print(value) if __name__ == '__main__': unittest.main() 結果: =>1 2 3 4 5 6 

2、讀取列表數據

import unittest,os from ddt import ddt,data,unpack,file_data '''NO.1單組元素和多組元素未分解都一樣,下面看嵌套,考眼力了~''' @ddt class Testwork(unittest.TestCase): @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}]) # @unpack def test_01(self,a): print(a) if __name__ == '__main__': unittest.main() 結果: =>[{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}] ※上面結果可以看出:無法運用到requests數據請求中,所以不是很實用※ '''NO.2多組元素分解''' @ddt class Testwork(unittest.TestCase): @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}]) @unpack def test_01(self,a,b): print(a,b) if __name__ == '__main__': unittest.main() 結果: =>{'name': 'lili', 'age': 12} {'sex': 'male', 'job': 'teacher'} ※拆分后的運行結果,不帶有[ ],拆分是將列表中的2個字典拆分,所以有2個數據※ 

3、讀取字典數據

import unittest,os from ddt import ddt,data,unpack,file_data '''※字典的讀取比較特殊,因為在拆分的時候,形參和實參的key值要一致,否則就報錯※''' '''NO.1單組數據''' @ddt class Testwork(unittest.TestCase): @data({'name':'lili','age':'16'},{'sex':'female','job':'nurser'}) # @unpack def test_01(self,a): print(a) if __name__ == '__main__': unittest.main() 結果: =>{'name': 'lili', 'age': '16'} {'sex': 'female', 'job': 'nurser'} ※以上運行的結果數據,就可以用來作為requests的請求參數~!※ '''NO.2多數據拆分,重點來了''' @ddt class Testwork(unittest.TestCase): @data({'name':'lili','age':'16'},{'name':'female','age':'nurser'}) @unpack def test_01(self,name,age): print(name,age) if __name__ == '__main__': unittest.main() 結果: =>lili 16 female nurser ※重點來了:首先結果展示的數據是字典里的value,沒有打印key的值;其次@data里的數據key值和def方法里的形參 名稱一定要一致,否則,打印的時候,就會報莫名的參數錯誤,這里就不做展示,愛學習的同學可以嘗試一下~!※ 

4、讀取文件數據

import unittest,os from ddt import ddt,data,unpack,file_data '''數據格式必須為json,且必須為雙引號的鍵值對形式,如果不是json格式,有列表等其它格式嵌套的話,無論是 否有@unpack,形參和參數數量都要和key值相等''' @ddt class testwork(unittest.TestCase): testdata=[{'a':'lili','b':12},{'a':'sasa','b':66}] @data(*testdata) # @unpack def test_01(self,value): print(value) @file_data(os.getcwd()+'/jsonll.txt') def test_02(self,value2): print(value2) if __name__ == '__main__': unittest.main() 結果: =>{'a': 'lili', 'b': 12} {'a': 'sasa', 'b': 66} nick male 29


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM