Exemple #1
0
def generate_data(xml_name='CaseDatabase.xml'):
    """
    初始化数据库数据
    :param xml_name: 数据库xml配置文件名称
    :return:
    """
    xml_path = os.path.join(case_database_path, xml_name)
    mylog.info('Init database from xml:{}'.format(xml_name))
    myxml = MyXml(xml_path)
    page = myxml.read_xml()  # 得到xml的根节点
    excel_list = page.findall('excel')  # 获取所有excel节点
    for excel in excel_list:
        mysql = MySql()
        mysql.connect()
        excel_name = excel.get('name')  # 获得excel名称
        sheet_list = excel.findall('sheet')  # 获得当前excel的sheet节点
        for sheet in sheet_list:
            sheet_name = sheet.get('name')  # 得到sheet名称
            data = read_data(excel_name, sheet_name)  # 获得当前sheet页的数据
            case_field = data[0]  # 获得用例字段列表,即excel第一行
            for case_data in data[1:]:  # 用例的数据实际是从excel的第二行开始的
                generate_data_num = case_field.index(
                    'generate_data')  # 用例是否需要生成数据库数据的字段索引
                is_generate_data = case_data[
                    generate_data_num]  # 用例是否需要生成数据库数据的字段数据:'True'/'False'
                if is_generate_data == 'True':
                    database_list = sheet.findall(
                        'database')  # 得到sheet下所有的database节点
                    for database in database_list:
                        database_name = database.get('name')  # 获得数据库名称
                        table_list = database.findall(
                            'table')  # 得到database下所有的table节点
                        for table in table_list:
                            table_name = table.get('name')  # 获得数据表名称
                            field_list = table.findall(
                                'field')  # 得到table下所有field节点
                            fields = ''  # 定义写入数据表的字段
                            values = ''  # 定义写入数据表的数据
                            for field in field_list:
                                fields = fields + field.text + ','  # 数据表字段合成字符串,用','隔开
                                field_num = case_field.index(
                                    field.get('name'))  # 写入数据表的字段索引位置
                                values = values + str(
                                    case_data[field_num]
                                ) + ','  # 写入数据合成字符串,用','隔开
                            # sql语句格式化,fields和values在合成字符串时末尾保留了',',所以需要去掉
                            sql = 'INSERT {table_name}({fields}) VALUES({values})'\
                                .format(table_name=table_name, fields=fields.rstrip(','), values=values.rstrip(','))
                            mysql.execute(sql)  # 执行sql语句,初始化数据库
        mysql.close()  # 关闭数据库
Exemple #2
0
def clear_data(xml_name='CaseDatabase.xml'):
    """
    清空数据库数据
    :param xml_name: 数据库xml配置文件名称
    :return:
    """
    xml_path = os.path.join(case_database_path, xml_name)  # 获取xml文件路径
    mylog.info('Clear database from xml:{}'.format(xml_name))
    myxml = MyXml(xml_path)
    page = myxml.read_xml()  # 得到xml的根节点
    clear = page.find('clear')  # 获取clear节点
    database_list = clear.findall('database')  # 得到sheet下所有的database节点
    for database in database_list:
        database_name = database.get('name')  # 获得数据库名称
        mysql = MySql()
        mysql.connect()
        table_list = database.findall('table')  # 得到database下所有的table节点
        for table in table_list:
            table_name = table.text  # 获得数据表名称
            sql = 'DELETE FROM {table_name}'.format(table_name=table_name)
            mysql.execute(sql)  # 执行sql语句,初始化数据库
            mysql.close()  # 关闭数据库