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
  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/di2wu/p/10431235.html
Copyright © 2011-2022 走看看