1.裝飾器 #裝飾器的官方定義: 裝飾器本質上是一個Python函數(其實就是閉包),它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數對象。裝飾器用於有以下場景,比如:插入日誌、性能測試、事務處理、緩存、許可權校驗等場景。 2.ddt import unittes ...
1.裝飾器
#裝飾器的官方定義: 裝飾器本質上是一個Python函數(其實就是閉包),它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數對象。裝飾器用於有以下場景,比如:插入日誌、性能測試、事務處理、緩存、許可權校驗等場景。
2.ddt
import unittest #引入ddt庫 from ddt import ddt,data,unpack test_data = [{"name":"張三"},2] @ddt#裝飾測試類 class DemoCase(unittest.TestCase): @data(test_data)#裝飾函數 def test_jia(self,item): print(item) def test_jian(self): pass if __name__ == '__main__': unittest.main()
運行結果:
plugins: html-3.2.0, metadata-2.0.4collected 2 items demo.py .[{'name': '張三'}, 2] . [100%] ============================== 2 passed in 0.04s ============================== Process finished with exit code 0
3.ddt脫外套
import unittest #引入ddt庫 from ddt import ddt,data,unpack test_data = [{"name":"張三"},2] @ddt#裝飾測試類 class DemoCase(unittest.TestCase): @data(*test_data)#裝飾函數,*test_data脫外套,根據脫外套後的數據執行次數 def test_jia(self,item): print(item) if __name__ == '__main__': unittest.main()
運行結果:
plugins: html-3.2.0, metadata-2.0.4collected 2 items demo.py .{'name': '張三'} .2 [100%] ============================== 2 passed in 0.04s ============================== Process finished with exit code 0
4.ddt中的@unpack
import unittest #引入ddt庫 from ddt import ddt,data,unpack test_data = [[2,6],[9,1000]] @ddt#裝飾測試類 class DemoCase(unittest.TestCase): @data(*test_data)#裝飾函數,*test_data脫外套,根據脫外套後的數據執行次數 @unpack def test_jia(self,a,b): print("a: ",a) print("b: ",b) if __name__ == '__main__': unittest.main()
運行結果: plugins: html-3.2.0, metadata-2.0.4collected 2 items demo.py
.a: 2 b: 6 .a: 9 b: 1000 [100%] ============================== 2 passed in 0.04s ==============================
5.ddt+openpyxl參數化實現
import unittest #引入ddt庫 from ddt import ddt,data,unpack from test01.doexcel import DoExcel
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#引入倉庫 from openpyxl import load_workbook class DoExcel(): def __init__(self,file,sheet): self.file=file self.sheet=sheet def return_excel_value(self): wb = load_workbook(self.file)#打開excel sheet_content = wb[self.sheet]#定位sheet工作博 data_list = []#列表用於存儲測試數據 for n in range(2,sheet_content.max_row+1):#行,第一行是標題,所以從第二行開始 data_dict = {}#字典用於存儲每組測試數據 for m in range(2,sheet_content.max_column+1): data_dict["method"]=sheet_content.cell(n,2).value data_dict["url"] = sheet_content.cell(n, 3).value data_dict["data"] = eval(sheet_content.cell(n, 4).value)#eval()將數據類型還原 data_dict["expect"] = sheet_content.cell(n, 5).value data_list.append(data_dict)#將字典存儲到list return data_listDoExcel類代碼
test_data = DoExcel("C:\\Users\\Administrator\\Desktop\\testdemo.xlsx","s1").return_excel_value()#[{},{},{}] @ddt#裝飾測試類 class DemoCase(unittest.TestCase): @data(*test_data)#裝飾函數,*test_data脫外套,根據脫外套後的數據執行次數 def test_jia(self,item): print(item["method"],item["url"],item["data"],item["expect"]) if __name__ == '__main__': unittest.main()
執行結果: plugins: html-3.2.0, metadata-2.0.4collected 2 items demo.py .post http://www.qabujiaban.com/user/login {'username': 'uuuu222都44', 'password': 'WJHasb124*1'} 0000 .get http://www.qabujiaban.com/user/login {'username': 'uuuu222都44', 'password': 'WJHasb124*1'} 0000 [100%] ============================== 2 passed in 0.31s ============================== Process finished with exit code 0