zoukankan      html  css  js  c++  java
  • some working learning总结学习(二)

     2. 读取excel上的测试用例和结果,成json格式,最终存到access数据库

    结果如下:

    {
        0: {
            'Req_ID': 'Fqqqqq/qqqqq',
            'Case_ID': 'ATC_LvPwrOff_Case001',
            'Description': 'kkkkkkkkkkk',
            'PreCondition': {
                'B': 4,
                'V: 0,
                'V': 0,
                'IN': 0,
                'IN': 0,
                'Ke: 1,
                'INN': 1,
                'INage': 12,
                'Re': 0,
                'Rue': 0
            },

    excel_tojson.py

    from openpyxl import load_workbook
    from openpyxl.styles import colors, Font
    
    wb = load_workbook('VCU_TC_LvPwrOff.xlsx')
    sheet = wb.active  # 获得当前正在显示的sheet, 也可以用wb.get_active_sheet()# 获得当前正在显示的sheet, 也可以用wb.get_active_sheet()
    
    # b5_too = sheet.cell(row=1, column=2)
    # print(b5_too.value)
    #
    # b6_too = sheet.cell(row=1, column=1)
    # b7_too = sheet.cell(row=2, column=1)
    # b8_too = sheet.cell(row=3, column=1)
    #
    # print(b6_too.value)
    # print(b7_too.value)
    # print(b8_too.value)
    #
    # print('-'*100)
    # for cell in list(sheet.rows)[0]:
    #     print(cell.value)
    #
    # print('-'*100)
    # #判断一行的有效数据长度
    # first_len = list(sheet.rows)[0]
    # # for i in first_len:
    # #     if 'None' == i.value:
    # #         first_len.remove(i)
    # print(len(first_len))
    # print('-'*100)
    # for row in sheet.iter_rows('A1:AF1'):
    #     for cell in row:
    #         print(cell.value)
    TCrows=[]
    First_info=[]
    First_info_list = []
    Second_info=[]
    Second_info_list = []
    pre_dic = {}
    #获取testcase
    
    
    #获取所有行对象
    for row in sheet.iter_rows():
        TCrows.append(row)
    
    def get_all_row():
        '''
          获取首行row的信息
          {"1":{"Req_ID":0,"Case_ID":1,"Description":2,"PreCondition":{
                        "IN_ChrgOffButton":x,
                        "IN_KeyStart":x}, "Action":{
                                            "IN_KeyStart":x
                                            }
            {'Req_ID': 0, 'Case_ID': 1, 'Description': 2, 'PreCondition': 3, 'Action': 13, 'ExpectedResults': 22, 'Result': 31}
          }
           }
          '''
        # for i in range(2, 14):
        pass
        # for i in range(2, 3):
        #     Cases.append(TCrows[i])
        # for Case in Cases:
        #     for cell in para_head:
        #         # print(cell.value,cell.coordinate)
        #         First_info_list.append(cell.value)
        #
        # # print(First_info_list)
        # len_first_list = len(First_info_list)
        # # print(len_first_list)
        # while True:
        #     if First_info_list[-1] == 'None':
        #         First_info_list.pop()
        #     else:
        #         break
        # return First_info_list, len_first_list
    
    def get_row_first():
        '''
        获取首行row的信息
        '''
        for i in range(0, 1):
            First_info.append(TCrows[i])
        for para_head in First_info:
            for cell in para_head:
                # print(cell.value,cell.coordinate)
                First_info_list.append(cell.value)
    
        # print(First_info_list)
        len_first_list = len(First_info_list)
        # print(len_first_list)
        while True:
            if First_info_list[-1] == 'None':
                First_info_list.pop()
            else:
                break
        return First_info_list,len_first_list
    
    def get_row_second():
        '''
        获取第二行row的信息
        '''
        for i in range(1, 2):
            Second_info.append(TCrows[i])
        for para_head in Second_info:
            for cell in para_head:
                # print(cell.value,cell.coordinate)
                Second_info_list.append(cell.value)
        len_second_list = len(Second_info_list)
    
        return Second_info_list,len_second_list
    
    def parse_row_first(First_info_list):
        '''
        分析处理首行数据,划分
        '''
        for i in First_info_list:
            if i != None:
                pre_list.append(i)
    
        for first_item in pre_list:
            index = First_info_list.index(first_item)
            # print(first_item, ':', index)
            pre_dic[first_item]=index
        #仅仅返回最后四部分的索引值
        return pre_dic  #{'Req_ID': 0, 'Case_ID': 1, 'Description': 2, 'PreCondition': 3, 'Action': 13, 'ExpectedResults': 22, 'Result': 31}
    
    def parse_item_length(pre_dic):
        index_PreCondition = pre_dic['PreCondition']
        index_Action = pre_dic['Action']
        index_ExpectedResults = pre_dic['ExpectedResults']
        index_Result = pre_dic['Result']
    
        len_PreCondition = pre_dic['Action']-pre_dic['PreCondition']
        len_Action = pre_dic['ExpectedResults']-pre_dic['Action']
        len_precondition = pre_dic['Result']-pre_dic['ExpectedResults']
        return index_PreCondition,index_Action,index_ExpectedResults,index_Result,len_PreCondition,len_Action,len_precondition
    
    def parse_second_item():
        '''
        处理第二行的item数据,使得Precondition[3,x]
        '''
    
    
    if __name__ == '__main__':
        First_info_list, len_first_list = get_row_first()
        pre_list = []  #添加首行item信息
    
        pre_dic = parse_row_first(First_info_list)
        index_PreCondition, index_Action, index_ExpectedResults,index_Result,len_PreCondition, len_Action, len_precondition=parse_item_length(pre_dic)
        #处理第二行title的数据
        Second_info_list, len_second_list = get_row_second()
    
        Cases=[]
    
        for i in range(2, 3):
            Cases.append(TCrows[i])
    
        sum_num = 0
        Result = {}
        for case in Cases:
            model_list = {}
            model_list[First_info_list[0]]= case[0].value
            model_list[First_info_list[1]]= case[1].value
            model_list[First_info_list[2]]= case[2].value
            # {'Req_ID': 0, 'Case_ID': 1, 'Description': 2, 'PreCondition': 3, 'Action': 13, 'ExpectedResults': 22, 'Result': 31}
            precond_dict={}
            for i in range(3,3+len_PreCondition):  #(3,13)
                precond_dict[Second_info_list[i]]= case[i].value
            model_list['PreCondition'] = precond_dict
            act_dict = {}
            for j in range(index_Action, index_ExpectedResults):  # (13,22)
                act_dict[Second_info_list[j]] = case[j].value
            model_list['Action'] = act_dict
            Expect_dict = {}
            for k in range(index_ExpectedResults, index_Result):  # (22,31)
                Expect_dict[Second_info_list[k]] = case[k].value
            model_list['Action'] = Expect_dict
            model_list['Result']= case[index_Result].value
    
            Result[sum_num] = model_list
            sum_num += 1
        print(Result)
    
    
    '''
    结果展示如下:
    {
        0: {
            'Req_ID': 'Func_LvPwrOff_Req001/Func_LvPwrOff_Req020/Func_LvPwrOff_Req021/Func_LvPwrOff_Req030',
            'Case_ID': 'ATC_LvPwrOff_Case001',
            'Description': 'KeyOn状态下电/VCU判断可以进行低压下电后,对BMS、DCDC、MCU(四个)、WPT、OBC等ECU低压下电控制-拉低硬线PwrOn/VCU判断可以进行低压下电后,对水泵、风扇、真空泵等低压执行器进行低压下电控制/任何状态(休闲、驾驶、充电)下低压下电,均需对热管理系统进行下电控制,控制热管理系统停止工作,降低整车静态功耗',
            'PreCondition': {
                'BMS_Tx_stPowComplete': 4,
                'VCU_Tx_stChrgFed': 0,
                'VCU_Tx_stReady': 0,
                'IN_ChrgOffButton': 0,
                'IN_KeyStart': 0,
                'KeySwt': 1,
                'IN_PowON': 1,
                'IN_12Voltage': 12,
                'RCValue': 0,
                'RC2Value': 0
            },
            'Action': {
                'VCU_Tx_stDCDCEn': 2,
                'VCU_Tx_powMaxPerm': 0,
                'VCU_Tx_stChrgFed': 0,
                'O_S_BMSPwrOn': 0,
                'O_S_MCUPwrOn': 0,
                'O_S_DCPwrOn': 0,
                'O_S_VCUst': 0,
                'O_S_OBCPwrOn': 0,
                'O_S_ACPDURly_ON': 0
            },
            'Result': None
        }
    }
    
    。。。。。。
    '''
    View Code

     3.  使用pypyodbc完成数据上传access数据库功能

    cursor.execute("insert into resource(cid,name) values(%s, '%s')" % (12,name) );

    pypy_odbc.py

    # import pypyodbc
    # str = 'Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=D:\db\DB_BenShaw.accdb'
    # db=pypyodbc.win_connect_mdb(str) # 打开数据库连接
    # curser = db.cursor()# 产生cursor游标
    # curser.execute("select * from 测试用例")
    
    #
    #导入模块
    import pypyodbc
    import json
    
    # import MySQLdb
    #定义conn
    def mdb_conn(db_name):
        """
        功能:创建数据库连接
        :param db_name: 数据库名称
        :param db_name: 数据库密码,默认为空
        :return: 返回数据库连接
        """
        # str = 'Driver={Microsoft Access Driver (*.mdb)};PWD' + password + ";DBQ=" + db_name
        str = 'Driver={Microsoft Access Driver (*.mdb,*.accdb)}'+";DBQ=" + db_name
        conn = pypyodbc.win_connect_mdb(str)
    
        return conn
    
    #增加记录
    def mdb_add(conn, cur, sql):
        """
        功能:向数据库插入数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except Exception as e:
            print(e)
            return False
    
    #删除记录
    def mdb_del(conn, cur, sql):
        """
        功能:向数据库删除数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except:
            return False
    
    #修改记录
    def mdb_modi(conn, cur, sql):
        """
        功能:向数据库修改数据
        :param conn: 数据库连接
        :param cur: 游标
        :param sql: sql语句
        :return: sql语句是否执行成功
        """
        try:
            cur.execute(sql)
            conn.commit()
            return True
        except:
            return False
    
    #查询记录
    def mdb_sel(cur, sql):
        """
        功能:向数据库查询数据
        :param cur: 游标
        :param sql: sql语句
        :return: 查询结果集
        """
        try:
            cur.execute(sql)
            return cur.fetchall()
        except:
            return []
    
    
    def read_test_conf():
        # 将字典类型的文件转换成字典
        f=open('a.txt',"r",encoding='utf-8')
        test_config=eval(f.read())
        f.close()
        return test_config
    
    def dic2sql(dic):
        sf = ''
    
        for key in dic:
            tup = [key,dic[key]]
            sf += (str(tup) + ',')
        sf = sf.rstrip(',')
    
        return sf
    
    
    if __name__ == '__main__':
        pathfile = 'D:\db\DB_BenShaw.accdb'
        tablename = '测试用例'
        conn = mdb_conn(pathfile)
        cur = conn.cursor()
        #读取testcase文件数据
        test_config = read_test_conf()
    
        for key,value in test_config.items():
            print("用例%s"%key+"进行数据的插入")
    
            Req_id_str = value['Req_ID']
            Req_id_str = Req_id_str.split('/')
            Req_id_list = []
            for i in Req_id_str:
                Req_id_list.append(i)         #['Func_LvPwrOff_Req001', 'Func_LvPwrOff_Req020', 'Func_LvPwrOff_Req021', 'Func_LvPwrOff_Req030'] 4
            # print(Req_id_list,len(Req_id_list))
    
            count = 0
            for Req_id in Req_id_list:
                print("用例%s里的第%s 条需求" % (key,count) + "进行数据的插入")
                #写入access数据库
                Function = '低压下电管理'
                Req_ID = Req_id
                #用例分级 = 功能测试(默认)
                TC_ID =  value['Case_ID']
                TC_Name = value['Description']
                import pymysql
                TC_Pre = value['PreCondition']
                TC_Pre = json.dumps(TC_Pre)
    
                # TC_Pre = pymysql.escape_string(TC_Pre)
                TC_Process = value['Action']
                TC_Process = json.dumps(TC_Process)
    
                TC_Result = value['Result']
    
    #插入之前进行查询,有则覆盖,无则增加
     #           查
                sql = "SELECT ID FROM " + tablename + " where TC_ID= '%s'" % TC_ID
                sel_data = mdb_sel(cur, sql)
                print(sel_data)
                if sel_data:
                    # 改
                    sql = "Update " + tablename + " Set TC_Pre = '%s',TC_Process = '%s',TC_Result='%s' where TC_ID = '%s'" % (
                        TC_Pre, TC_Process, TC_Result, TC_ID)
                    if mdb_modi(conn, cur, sql):
                        print("%s修改成功22222222222!" % count)
                    else:
                        print("修改失败!")
    
                else:
                    # 增
                    sql = "Insert Into 测试用例(Function,Req_ID,用例分级,TC_ID,TC_Name,TC_Pre,TC_Process,TC_Result) Values ('低压下电管理', '%s','功能测试','%s','%s','%s','%s','%s')" % (
                        Req_ID, TC_ID, TC_Name, TC_Pre, TC_Process, TC_Result)
                    # sql = "Insert Into " + tablename + "(Function,Req_ID,用例分级,TC_ID,TC_Name,TC_Pre,TC_Process,TC_Result) Values(低压下电管理, Func_LvPwrOff_Req001, 功能测试, ATC_LvPwrOff_Case001,Description,PreCondition,Action,Result)"
                    if mdb_add(conn, cur, sql):
                        print("第%s条数据插入成功!" % count)
                    else:
                        print("第%s条数据插入失败!" % count)
    
                count +=1
    
        # #删
        # sql = "Delete * FROM " + tablename + " where id = 32"
        # if mdb_del(conn, cur, sql):
        #    print("删除成功!")
        # else:
        #    print("删除失败!")
        #
        # #改
        # sql = "Update " + tablename + " Set IsFullName = 1 where ID = 33"
        # if mdb_modi(conn, cur, sql):
        #    print("修改成功!")
        # else:
        #    print("修改失败!")
    
        #查
        # sql = "SELECT * FROM " + tablename + " where id > 10"
        # sel_data = mdb_sel(cur, sql)
        # print(sel_data)
    
        cur.close()    #关闭游标
        conn.close()   #关闭数据库连接
    View Code
  • 相关阅读:
    String类源码解析之理解indexOf函数--转载
    SQL优化--转载
    通过cmd/批处理 开启关闭windows中的mysql数据库
    windows查看连接过wifi的密码
    Java Annotation认知(包括框架图、详细介绍、示例说明)--转载
    springboot加载配置文件的优先级
    SpringBoot项目创建的三种方式
    雷总小米十周年演讲---国外友人评价第一次看到MIUI系统
    装饰器模式
    嵌套的setTimeout
  • 原文地址:https://www.cnblogs.com/di2wu/p/10431235.html
Copyright © 2011-2022 走看看