python之DDT

作者: 每天进步一点点变成更好的自己 | 来源:发表于2021-12-22 12:49 被阅读0次

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

    相关文章

      网友评论

        本文标题:python之DDT

        本文链接:https://www.haomeiwen.com/subject/uubtqrtx.html