python之DDT

写得很好地一篇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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容