Python Excel 数据读取及用例执行框架
"def read_xlsx_by_sheet_name(xlsxfile,sheet_name):\n wb = xlrd.open_workbook(xlsxfile)\n sh = wb.sheet_by_name(sheet_name)\n result_detail={}\n for i in range(1,sh.nrows):\n result_detail[i]=dict(zip(sh.row_values(0), sh.row_values(i)))\n return result_detail\n\n#生成用例执行策略,执行策略转换为int\n'''\n执行策略:\n包括:\n执行总轮数:命令字 1001 。第二列对应则是测试轮数配置,所有用例执行完成一次为1轮,配置为0,说明一直循环\n执行总时间:命令字 1002 。第二列对应则是时间配置,单位 秒,配置为0,说明一直循环\n执行间隔:每轮执行之间的时间间隔,单位为 秒\n\n失败后策略:\n本轮拨测有失败用例的处理侧率\n继续全部重跑,命令字 2001\n后续只运行当前测试成功用例,命令字 2002\n拨测暂停 ,命令字2003\n'''\n@uni_try_func\ndef mk_case_policy(xlsxfile,sheet_name):\n result = read_xlsx_by_sheet_name(xlsxfile,sheet_name)\n tmpinfo = result['result_detail']\n case_policy_info={}\n if len(tmpinfo)>=1:\n case_policy_info = tmpinfo[1]\n for key in case_policy_info:\n case_policy_info[key] = int(case_policy_info[key])\n atgl.st_setvalue('case_policy_info',case_policy_info)\n return case_policy_info\n\n#生成用例执行套件,1 执行,0 不执行\ndef mk_case_suite(xlsxfile,sheet_name):\n result = read_xlsx_by_sheet_name(xlsxfile,sheet_name)\n tmpinfo = result['result_detail']\n case_suite_info={}\n for numkey in tmpinfo:\n onecase=tmpinfo[numkey]\n if int(onecase['是否执行'])==1:\n case_suite_info[onecase['用例名称']]={}\n for key in onecase:\n if onecase[key] != '':\n case_suite_info[onecase['用例名称']][key] = onecase[key]\n #case_suite_info[onecase['用例名称']]={'运行主函数':onecase['运行主函数'],'是否执行':int(onecase['是否执行'])}\n atgl.st_setvalue('case_suite_info',case_suite_info)\n return case_suite_info\n\n#生成用例参数函数,生成 atgl.st_setvalue('case_para_info',case_para_info) 全局数据,供用例函数调用\n@uni_try_func\ndef mk_case_paras(xlsxfile,sheet_name):\n result = read_xlsx_by_sheet_name('云桌面拨测数据_TER.xlsx', '用例参数表')\n cases_para = result['result_detail']\n case_para_info={}\n for numkey in cases_para:\n onecase=cases_para[numkey]\n case_name=onecase['用例名称']\n para_num=int(onecase['参数个数'])\n case_para_info[case_name]={}\n for i in range(1,para_num+1):\n case_para_info[case_name][onecase[f'参数{i}']] = onecase[f'参数{i}配置']\n atgl.st_setvalue('case_para_info',case_para_info)\n return case_para_info\n#根据测试步骤调用测试方法主函数\ndef auto_stflow(func,*args,**kwargs):\n autost_mylog("auto_stflow:调用方法<%s>, 参数:args <%s>,kwargs <%s>"%(func.name,str(args),str(kwargs)))\n tmpstr=func.name+"("\n tmparg=""\n tmpkwarg=""\n for i in range(0,len(args)):\n if i==0:\n tmparg=str(args[i])\n else:\n tmparg = tmparg+","+str(args[i])\n tmpstr = tmpstr + tmparg\n for key in kwargs:\n if len(tmpkwarg)==0:\n tmpkwarg=str(key)+"="+str(kwargs[key])\n else:\n tmpkwarg =tmpkwarg+"," + str(key) + "=" + str(kwargs[key])\n tmpstr = tmpstr + tmpkwarg+")"\n autost_mylog("auto_stflow:开始执行调用 %s "%(tmpstr))\n return func(*args,**kwargs)\n#适用角色:终端;终端侧按照策略执行用例集,采用独立工作线程\ndef run_according_to_policy():\n autost_mylog('工作线程 run_according_to_policy 启动。。。。')\n case_policy_info = atgl.st_getvalue('case_policy_info', {})\n case_suite_info = atgl.st_getvalue('case_suite_info', {})\n run_policy = case_policy_info['执行策略']\n run_interval = case_policy_info['执行间隔']\n fail_policy = case_policy_info['失败后策略']\n def one_round_cases():\n autost_mylog(f'one_round_cases -->case_suite_info={case_suite_info}')\n for case in case_suite_info:\n if case_suite_info[case]['是否执行'] == 0:\n continue\n result = auto_stflow(eval(case_suite_info[case]['运行主函数']))\n autost_mylog(f'用例{case},主函数 {case_suite_info[case]['运行主函数']},执行结果result= {result}')\n if result['result'] == False:\n # 执行测试失败后暂停测试\n if fail_policy == 2003:\n run_status = False\n return False\n # 执行失败的用例下次不执行\n elif fail_policy == 2002:\n case_suite_info[case]['是否执行'] = 0\n #atgl.st_setvalue('case_suite_info',case_suite_info)\n # 用例之间间隔5秒\n time.sleep(5)\n return True\n if run_policy == 1002:\n run_time_total = case_policy_info['执行轮次(时间)']\n starttime = time.perf_counter()\n endtime = starttime\n while endtime-starttime > run_time_total:\n run_status = one_round_cases()\n if run_status == False:\n autost_mylog(f'测试用例集执行{run_rounds}轮,用例<{case}>执行失败,依据测试策略,测试暂停,退出!')\n break\n autost_mylog(f'测试用例集执行{run_rounds}轮,目前已完成{i+1}轮')\n #每轮用例执行之间间隔按配置执行\n time.sleep(run_interval)\n if run_time_total != 0:\n endtime = time.perf_counter()\n else:\n run_rounds = case_policy_info['执行轮次(时间)']\n for i in range(0,run_rounds):\n run_status = one_round_cases()\n if run_status == False:\n autost_mylog(f'测试用例集执行{run_rounds}轮,用例<{case}>执行失败,依据测试策略,测试暂停,退出!')\n break\n autost_mylog(f'测试用例集执行{run_rounds}轮,目前已完成{i+1}轮')\n #每轮用例执行之间间隔按配置执行\n if i+1 < run_rounds:\n time.sleep(run_interval)\n autost_mylog('工作线程 run_according_to_policy 结束。。。。')
原文地址: https://www.cveoy.top/t/topic/pQcZ 著作权归作者所有。请勿转载和采集!