写得很好地一篇DDT的文章:https://www.cnblogs.com/Maruying/p/13516791.html
DDT:数据驱动(Data Driver Testing)。
1.python文件之读取csv文件
python之csv模块读取csv文件,使用pytest参数化调用DDT。
csv文件就是逗号分隔的文本文件,使用python的csv模块来处理csv文件,可以结合pytest的参数化处理方式来,实现DDT。
##csv内容如下,123.csv内容:
zhangsan,lisi,wangwu
liuliu,meimie
import csv
# #csv,获取csv数据
import pytest
def get_csv_data():
with open('123.csv') as f:
lst = csv.reader(f)
test_data =[]
for csv_row in lst:
test_data.extend(csv_row)
# print(test_data)
return test_data
@pytest.mark.parametrize('name',get_csv_data())
def test_csv(name):
print('本次打印的内容:%s'%name)
if __name__ == '__main__':
print(get_csv_data())
pytest.main(['-sv','test_ddt.py'])
##返回内容:
['zhangsan', 'lisi', 'wangwu', 'liuliu', 'meimei']
test_ddt.py::test_csv[zhangsan] 本次打印的内容:zhangsan
test_ddt.py::test_csv[lisi] 本次打印的内容:lisi
test_ddt.py::test_csv[wangwu] 本次打印的内容:wangwu
test_ddt.py::test_csv[liuliu] 本次打印的内容:liuliu
test_ddt.py::test_csv[meimie] 本次打印的内容:meimei
2.python文件之读取json文件
python之json模块读取json文件,使用pytest参数化调用DDT。
python的json模块来处理json文件,可以结合pytest的参数化处理方式来,实现DDT。
##json内容,testjson.json中的内容:
{"name": ["zhangsan","lisi","wangwu"]}
import json
#json,获取json数据
def get_json_data():
with open('testjson.json') as f:
lst_data = json.load(f)
test_json_data =[]
# for json_row in lst_data["name"]:
test_json_data.extend(lst_data["name"])
return test_json_data
@pytest.mark.parametrize('name',get_json_data())
def testc_json(name):
print('本次打印的内容:%s'%name)
if __name__ == '__main__':
# print(get_csv_data())
pytest.main(['-sv','test_ddt.py'])
3.python文件之读取excel文件
python之xrld模块读取excel文件,使用pytest参数化调用DDT。
python的xrld模块来处理excel文件,可以结合pytest的参数化处理方式来,实现DDT。
前置数据准备-testexcel.xls中的内容:
image.png
import xlrd
#excel,获取excel数据
def get_excel_data():
file_name="testexcel.xls"
lst_data_wb = xlrd.open_workbook(file_name)
lst_data_sheet = lst_data_wb.sheet_by_index(0)
lst_data_sheet_nrow = lst_data_sheet.nrows
lst_data_sheet_ncol = lst_data_sheet.ncols
test_excel_data = []
for row in range(lst_data_sheet_nrow):
for col in range(lst_data_sheet_ncol):
test_excel_data_every = lst_data_sheet.cell_value(row,col)
# print(test_excel)
test_excel_data.append(test_excel_data_every)
return test_excel_data
@pytest.mark.parametrize('name',get_excel_data())
def testc_json(name):
print('本次打印的内容:%s'%name)
if __name__ == '__main__':
# print(get_csv_data())
print(get_excel_data())
pytest.main(['-sv','test_ddt.py'])
返回的内容:
['zhangsan', 'wangwu', 'lisi']
test_ddt.py::testc_json[zhangsan] 本次打印的内容:zhangsan
test_ddt.py::testc_json[wangwu] 本次打印的内容:wangwu
test_ddt.py::testc_json[lisi] 本次打印的内容:lisi
4.python文件之读取ddt
python之ddt模块实现DDT。
python的三方库ddt模块来处理ddt文件,可以结合pytest的参数化处理方式来,实现DDT。
#ddt,使用@ddt,@data,@unpack,@file_data加载数据
from ddt import ddt,data,unpack,file_data
import unittest
import os
def get_data():
testdata = [{'name': 'tom', 'age': 21}, {'name': 'wendy', 'age': 22}]
return testdata
@ddt
class MyTestCase(unittest.TestCase):
# #读取一个元组
@data(1,2,3)
def test_001(self,value):
print(value) #返回内容: 1 2 3
#读取多个元组
@data((1,2,3),(4,5,6))
def test_002(self,value):
print(value) #返回内容:(1,2,3)
# (4,5,6)
@data((1,2,3),(4,5,6))
@unpack #拆包
def test_003(self,value1,value2,value3):
print(value1,value2,value3) #返回内容:1 2 3
# 4 5 6
# #列表
@data([{'name':'tom','age':21},{'name':'wendy','age':22}])
def test_004(self,value):
print(value) #返回内容:[{'name': 'tom', 'age': 21}, {'name': 'wendy', 'age': 22}]
# #字典
@data({'name':'tom','age':21},{'name':'wendy','age':22})
def test_005(self,value):
print(value) #返回内容:{'name': 'tom', 'age': 21}
# {'name': 'wendy', 'age': 22}
#字典-value
@data({'name':'tom','age':'21'},{'name':'wendy','age':'22'})
@unpack
def test_006(self,name,age):
print(name,age) #返回内容:tom 21
# wendy 22
#变量或者方法调用
testdata =[{'name':'tom','age':21},{'name':'wendy','age':22}]
#方法调用
@data(get_data())
def test_007(sefl,value):
print(value) #返回内容:[{'name': 'tom', 'age': 21}, {'name': 'wendy', 'age': 22}]
@data(testdata)
def test_008(sefl,value):
print(value) #返回内容:[{'name': 'tom', 'age': 21}, {'name': 'wendy', 'age': 22}]
#读文件
@file_data(os.getcwd()+'/testjson.json')
def test_009(sefl,value):
print(value) #返回内容:['zhangsan', 'lisi', 'wangwu']
if __name__ == '__main__':
unittest.main()
所有总结代码如下:
import csv
import pytest
# #csv,获取csv数据
def get_csv_data():
with open('123.csv') as f:
lst = csv.reader(f)
test_data =[]
for csv_row in lst:
test_data.extend(csv_row)
# print(test_data)
return test_data
@pytest.mark.parametrize('name',get_csv_data())
def test_csv(name):
print('本次打印的内容:%s'%name)
import json
#json,获取json数据
def get_json_data():
with open('testjson.json') as f:
lst_data = json.load(f)
test_json_data =[]
# for json_row in lst_data["name"]:
test_json_data.extend(lst_data["name"])
return test_json_data
import xlrd
#excel,获取excel数据
def get_excel_data():
file_name="testexcel.xls"
lst_data_wb = xlrd.open_workbook(file_name)
lst_data_sheet = lst_data_wb.sheet_by_index(0)
lst_data_sheet_nrow = lst_data_sheet.nrows
lst_data_sheet_ncol = lst_data_sheet.ncols
test_excel_data = []
for row in range(lst_data_sheet_nrow):
for col in range(lst_data_sheet_ncol):
test_excel_data_every = lst_data_sheet.cell_value(row,col)
# print(test_excel)
test_excel_data.append(test_excel_data_every)
return test_excel_data
@pytest.mark.parametrize('name',get_excel_data())
def testc_json(name):
print('本次打印的内容:%s'%name)
if __name__ == '__main__':
# print(get_csv_data())
# print(get_excel_data())
pytest.main(['-sv','test_ddt.py'])
#数据库,获取数据库中的数据
import psycopg2
def func(**kwargs):
pg_connector = None
try:
#打开数据库连接
pg_connector =psycopg2.connect(host='127.0.0.1',port=5432,database='library_sit3',user='test',password='test123')
#使用cursor()方法获取操作游标
pg_cursor=pg_connector.cursor()
#创建表,execute方法执行SQL语句
sql_stat = "CREATE TABLE test_class_id(id INT PRIMARY KEY NOT NULL, test_class TEXT, test_id CHAR(10))";
pg_cursor.execute(sql_stat)
#插入表
sql_stat = "insert into test_class_id(id, test_class, test_id) values (1, 'a', '3')"
pg_cursor.execute(sql_stat)
sql_stat = "insert into test_class_id(id, test_class, test_id) values (2, 'a', '3')"
pg_cursor.execute(sql_stat)
##更改字段值
sql_stat = "update test_class_id set test_class='b' where id=1"
pg_cursor.execute(sql_stat)
pg_connector.commit() #一定要commit,不然不会提交生效,意思:提交到数据库执行
finally:
if pg_connector is not None:
pg_connector.close()
#ddt,使用@ddt,@data,@unpack,@file_data加载数据
from ddt import ddt,data,unpack,file_data
import unittest
import os
def get_data():
testdata = [{'name': 'tom', 'age': 21}, {'name': 'wendy', 'age': 22}]
return testdata
@ddt
class MyTestCase(unittest.TestCase):
# #读取一个元组
@data(1,2,3)
def test_001(self,value):
print(type(value),value) #返回内容-<class 'int'>: 1 2 3
#读取一个字符串
@data('1','2','3')
def test_001_1(self, value):
print(type(value), value) # 返回内容-<class 'str'>: 1 2 3
#读取多个元组
@data((1,2,3),(4,5,6))
def test_002(self,value):
print(type(value),value) #返回内容-<class 'tuple'>:(1,2,3),(4,5,6)
@data((1,2,3),(4,5,6))
@unpack #拆包
def test_003(self,value1,value2,value3):
print(type(value1),type(value2),type(value3),value1,value2,value3) #返回内容<class 'int'>:1 2 3 \n 4 5 6
# #列表
@data([{'name':'tom','age':21},{'name':'wendy','age':22}])
def test_004(self,value):
print(type(value),value) #返回内容<class 'list'>:[{'name': 'tom', 'age': 21}, {'name': 'wendy', 'age': 22}]
# #字典
@data({'name':'tom','age':21},{'name':'wendy','age':22})
def test_005(self,value):
print(type(value),value) #返回内容<class 'dict'>:{'name': 'tom', 'age': 21} \n {'name': 'wendy', 'age': 22}
#字典-value
@data({'name':'tom','age':'21'},{'name':'wendy','age':'22'})
@unpack
def test_006(self,name,age):
print(type(name),type(age),name,age) #返回内容 <class 'str'>:tom 21 wendy 22
#变量或者方法调用
testdata =[{'name':'tom','age':21},{'name':'wendy','age':22}]
#方法调用
@data(get_data())
def test_007(sefl,value):
print(type(value),value) #返回内容<class 'list'>:[{'name': 'tom', 'age': 21}, {'name': 'wendy', 'age': 22}]
@data(testdata)
def test_008(sefl,value):
print(type(value),value) #返回内容<class 'list'>:[{'name': 'tom', 'age': 21}, {'name': 'wendy', 'age': 22}]
#读文件
@file_data(os.getcwd()+'/testjson.json')
def test_009(sefl,value):
print(type(value),value) #返回内容<class 'list'> ['wendy', 'honghong', 'xignxing']
if __name__ == '__main__':
unittest.main()
网友评论