pythonデータドライバ-ddt
16722 ワード
目次一、データ駆動紹介 二、DDT基本使用紹介 2.0テストベース 2.1使用手順 2.1 ddt単一データの読み出し 2.2.1ケース 2.2 ddtコンビネーション内のデータを読み出す(@unpack) 2.2.1加unpack 2.2.2 unpack を追加しない
2.3辞書 を読み取る
三、DDTとExcel結合 3.1 excel解析クラス書き方 3.2 ddtとexcelの結合例
一、データ駆動の紹介
データ駆動、私の理解、簡単な点は、データテストデータのパラメータ化です.
二、DDT基本使用紹介
2.0ベースクラスのテスト
2.1使用手順パイロット ddt を使用
2.1 ddt単一データの読み出し
この方式はあまり応用されていない.
2.2.1ケース
3回印刷し、それぞれ1、2、3
2.2 ddtコンビネーション内のデータの読み出し(@unpack)
この方式は比較的一般的な方式であり,多パラメータ用例のパラメータ化を実現できる.
2.2.1加unpack
印刷結果
2.2.2 unpackなし
印刷結果
2.3辞書の読み取り
印刷結果
三、DDTとExcelの結合
3.1 excel解析クラスの書き方
3.2 ddtとexcelの結合例
テスト結果
一、データ駆動の紹介
データ駆動、私の理解、簡単な点は、データテストデータのパラメータ化です.
二、DDT基本使用紹介
2.0ベースクラスのテスト
class Test:
def __init__(self, a, b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
def sub(self):
return self.a - self.b
def multi(self):
return self.a * self.b
def div(self):
return self.a / self.b
2.1使用手順
from ddt import ddt, data, unpack
2.1 ddt単一データの読み出し
この方式はあまり応用されていない.
2.2.1ケース
@ddt
class TestExample0428(unittest.TestCase):
def setUp(self):
pass
@data(1, 2, 3)
def test_add(self, *args, **kwargs):
print(*args)
3回印刷し、それぞれ1、2、3
2.2 ddtコンビネーション内のデータの読み出し(@unpack)
この方式は比較的一般的な方式であり,多パラメータ用例のパラメータ化を実現できる.
2.2.1加unpack
@ddt
class TestExample0428(unittest.TestCase):
def setUp(self):
pass
@data((1, 2, 3), (2, 3, 5), (1, 1, 1))
@unpack
def test_dict(self, *args, **kwargs):
print(" ")
# print(*args, **kwargs)
print(*args)
印刷結果
1 2 3
2 3 5
1 1 1
2.2.2 unpackなし
@ddt
class TestExample0428(unittest.TestCase):
def setUp(self):
pass
@data((1, 2, 3), (2, 3, 5), (1, 1, 1))
def test_dict(self, *args, **kwargs):
print(" ")
# print(*args, **kwargs)
print(*args)
印刷結果
(1, 2, 3)
(2, 3, 5)
(1, 1, 1)
2.3辞書の読み取り
@ddt
class TestExample0428(unittest.TestCase):
def setUp(self):
pass
@data({"name":"gupan", "length":"170cm"}, {"age":"12"})
def test_dict(self, *args, **kwargs):
print(" ")
print(*args, **kwargs)
印刷結果
{'name': 'gupan', 'length': '170cm'}
{'age': '12'}
三、DDTとExcelの結合
3.1 excel解析クラスの書き方
# -*- coding:utf-8 -*-
# __author__ = 'gupan'
from config import settings
import os
import sys
from src.utils import utils
import xlrd
import traceback
class ExcelParse:
"""
EXCEL
self.file_path:
self.workbook: excel
self.sheet_obj:
self.nrows:
self.ncols:
__init__(self, file_path):
aquire_cell_data(self, row, col): , -1
heads(self, *args, **kwargs):
aquire_methodName_col(self):
aquire_each_col_type(self):
datas(self, *args, **kwargs): ,
"""
def __init__(self, file_path):
'''
:param file_path:
'''
self.file_path = file_path
if not os.path.exists(self.file_path):
utils.print_log_error(self.file_path + " , !!!!!")
sys.exit(1)
try:
self.workbook = xlrd.open_workbook(self.file_path)
except Exception as err:
utils.print_log_error(" xls
")
utils.print_log_error(traceback.format_exc())
raise err
# Excel , ,
self.sheet_obj = self.workbook.sheets()[0]
#
self.nrows = self.sheet_obj.nrows
#
self.ncols = self.sheet_obj.ncols
if self.nrows == 1 or self.ncols == 0:
utils.print_log_error(file_path + " , !!!!!")
sys.exit(1)
def aquire_cell_data(self, row, col):
'''
:param row: ( -1)
:param col: ( -1)
:return: (str )
'''
return self.sheet_obj.cell_value(row - 1,col - 1)
def heads(self, *args, **kwargs):
'''
:param args:
:param kwargs:
:return:
'''
heads_info = []
for col in range(0, self.ncols):
heads_info.append(self.sheet_obj.cell_value(0, col))
return heads_info
def aquire_methodName_col(self):
'''
:return:
'''
heads = self.heads()
try:
idx = heads.index(settings.method_desc)
except IndexError as err:
utils.print_log_error(self.file_path+" "+settings.method_desc + '
')
utils.print_log_error(traceback.format_exc())
raise err
return idx
def aquire_each_col_type(self):
'''
:return: ,
'''
col_type_desc_list = []
for col in range(0, self.ncols):
col_type_desc_list.append(self.sheet_obj.cell_value(settings.desc_type_row - 1, col))
return col_type_desc_list
def datas(self, *args, **kwargs):
'''
,
:param args:
:param kwargs:
:return: , key
'''
test_datas = {}
#
data_begin_col = settings.data_begin_col - 1
#
data_begin_row = settings.data_begin_row - 1
#
type_list = self.aquire_each_col_type()
#
method_col = self.aquire_methodName_col()
#
pre_method_name = self.sheet_obj.cell_value(data_begin_row, method_col)
# method
method_datas = []
method_count = 0
# ,
for row in range(settings.data_begin_row - 1, self.nrows):
row_data = []
cur_method_name = self.sheet_obj.cell_value(row, method_col)
#
for col in range(data_begin_col, self.ncols):
type_desc = type_list[col]
cell_data = self.sheet_obj.cell_value(row, col)
cell_data = utils.type_switch(cell_data, type_desc)
row_data.append(cell_data)
if pre_method_name == cur_method_name:
method_datas.append(row_data)
method_count += 1
else:
test_datas[pre_method_name] = method_datas.copy()
# ,
method_datas.clear()
method_count = 0
pre_method_name = cur_method_name
method_datas.append(row_data)
# 0
if method_count != 0:
test_datas[pre_method_name] = method_datas
return test_datas
3.2 ddtとexcelの結合例
@ddt
class TestExample0428(unittest.TestCase):
def setUp(self):
pass
@data(*test_datas['test_add'])
@unpack
def test_add(self, *args, **kwargs):
p1, p2, value = args
result = Test(p1, p2).add()
try:
self.assertEqual(result, value, " , ")
utils.print_log_info(" ")
except AssertionError as err:
err_str = traceback.format_exc()
utils.print_log_error(err_str)
raise err
テスト結果
test_add_1__2__2__4_ (src.test.case.testExample.TestExample0428) ...
ok
test_add_2__2__2__4_ (src.test.case.testExample.TestExample0428) ... ok
test_add_3__3__3__6_ (src.test.case.testExample.TestExample0428) ... ok
test_add_4__4__4__8_ (src.test.case.testExample.TestExample0428) ... ok
test_dict (src.test.case.testExample.TestExample0428) ... ok
test_div (src.test.case.testExample.TestExample0428) ... ok
test_multi (src.test.case.testExample.TestExample0428) ... ok
test_sub (src.test.case.testExample.TestExample0428) ... ok