def delete_datas_from_table_with_sql(self, sql): # 用来删除指定表中的所有数据 ''' :param table_name: 数据库中表的名字 :return: ''' try: db_config = eval(ReadConfig().get_config_data( config_path, 'DB', 'db_config')) cnn = mysql.connector.connect(**db_config) # 建立数据库连接 cursor = cnn.cursor() # 游标cursor cursor.execute(sql) # 执行语句 cnn.commit() # 提交 cursor.close() # 关闭游标 cnn.close() # 关闭连接 MyLog().info('执行数据库语句--》{}《--成功!!!'.format(sql)) except: MyLog().error('执行数据库语句--》{}《--失败!!!'.format(sql))
def get_datas_from_database(self, sql, state='all'): # 读取数据 ''' :param sql: 需要执行的sql语句 :param state: 查询一条数据时,state=1;查询多条数据时,state='all' :return: res为查询到的结果 ''' db_config = eval(ReadConfig().get_config_data(config_path, 'DB', 'db_config')) cnn = mysql.connector.connect(**db_config) # 建立数据库连接 cursor = cnn.cursor() # 游标cursor cursor.execute(sql) # 执行语句 # cnn.commit() if state == 1: res = cursor.fetchone() else: res = cursor.fetchall() cursor.close() # 关闭游标 cnn.close() # 关闭连接 return res
def get_data(self, file_path): # 从excel中获取测试数据 mode = eval(ReadConfig.get_config_data(dir_config.config_path, self.section, self.option)) # 读取配置文件,拿到配置文件中的字典 test_datas = [] for key in mode: # 遍历字典中的key wb = load_workbook(file_path) sheet = wb[key] # 获取到表单 headers = [] for i in range(1, sheet.max_column+1): # 获取表中每一列的标题,添加到列表里面 headers.append(sheet.cell(3, i).value) if mode[key] == "all": # 如果配置文件中,表单名对应的值为all,就加载这个表单中所有的行 for i in range(4, sheet.max_row+1): # 从第二行开始,第一行是title row_data = {} for j in range(1, sheet.max_column+1): row_data[headers[j-1]] = sheet.cell(i, j).value row_data['sheet_name'] = key # 在字典中加入表单名,方便在执行测试用例时调用,执行用例时,需将测试结果写回到对应的表单中 test_datas.append(row_data) # 将字典添加到列表中 else: for case_id in mode[key]: # 配置文件中,表单名对应的值为一个列表,该字典为excel中用例数据对应的编号,遍历该字典,拿到用例编号 row_data = {} for j in range(1, sheet.max_column+1): row_data[headers[j-1]] = sheet.cell(case_id+3, j).value row_data['sheet_name'] = key # 在字典中加入表单名,方便在执行测试用例时调用,执行用例时,需将测试结果写回到对应的表单中 test_datas.append(row_data) # 将字典添加到列表中 return test_datas
def process_game(game_button): while eval(ReadConfig().read_config(read_path.conf_path, 'BASE', 'run_flg')): driver = webdriver.Firefox() # driver.maximize_window() driver.get(common_data.test_url) home_page = HomePage(driver) # 点击游戏DOTA2 logging.info('----------开始点击DOTA2游戏按钮----------') # home_page.judge_dota2_button().click_dota2_button() home_page.judge_game_button(game_button).click_game_button( game_button) time.sleep(5) # home_page.click_dota2_button() home_page.click_game_button(game_button) logging.info('----------点击成功!----------') # 判断是否有进行中的游戏,如果有则进入游戏,没有则5分钟获取一次数据,直到有数据为止 logging.info('----------开始进入进行中游戏----------') time.sleep(5) home_page.judge_process_game(game_button)[0].click() # 切换窗口 handles = driver.window_handles driver.switch_to.window(handles[-1]) # 判断是否有赛况数据,有数据则进入数据对比,没有数据则抛出异常 game_page = GamePage(driver) if game_page.judge_score_detail(): # 先判断比赛是否结束 logging.info('----------比赛状态为{}----------'.format( game_page.judge_game_finish())) if not game_page.judge_game_finish(): # 如果没有胜败图标表示比赛进行中 logging.info('----------开始进行数据对比----------') data_change_flg = True while data_change_flg: game_page.compare_data() # 对比完成刷新页面后,判断能否正常获取赛况数据 if game_page.judge_score_detail(): # 如果能正常获取赛况数据,判断能否有胜败方图标(比赛是否结束) if game_page.judge_game_finish(): # 如果有胜败方图标,说明比赛结束,退出浏览器 data_change_flg = False driver.quit() else: # 如果没有胜败方图标,说明比赛未结束,继续判断数据是否实时变化 if game_page.judge_data_change(): # 如果数据有实时变化,则继续对比数据 logging.info( '----------websocket数据推送断掉,刷新后已重新推送数据----------' ) continue else: # 如果数据没有实时变化,说明数据推送有问题,抛出异常 url = driver.current_url logging.info( '----------数据推送异常,无法实时更新数据!!!----------' ) SendAlarm().send_dingtalk_alarm( '数据推送异常,无法实时更新数据,地址是:{}'.format(url)) driver.quit() else: # 如果不能获取赛况数据,抛出异常,跳出循环 data_change_flg = False else: # 如果有胜败图标,表示比赛已结束 driver.quit() logging.info('----------比赛怎么结束了???----------')