# excel
| @api.route('/apm/export/report', methods=['post', 'get']) | |
| def exportReport(): | |
| platform = method._request(request, 'platform') | |
| scene = method._request(request, 'scene') | |
| try: | |
| path = f.export_excel(platform=platform, scene=scene) | |
| result = {'status': 1, 'msg':'success', 'path': path} | |
| except Exception as e: | |
| traceback.print_exc() | |
| result = {'status': 0, 'msg':str(e)} | |
|     return result | 
| def export_excel(self, platform, scene): | |
| logger.info('Exporting excel ...') | |
| android_log_file_list = ['cpu_app','cpu_sys','mem_total','mem_native','mem_dalvik', | |
| 'battery_level', 'battery_tem','upflow','downflow','fps'] | |
| ios_log_file_list = ['cpu_app','cpu_sys', 'mem_total', 'battery_tem', 'battery_current', | |
| 'battery_voltage', 'battery_power','upflow','downflow','fps','gpu'] | |
| log_file_list = android_log_file_list if platform == 'Android' else ios_log_file_list | |
| wb = xlwt.Workbook(encoding = 'utf-8') | |
| k = 1 | |
| for name in log_file_list: | |
| ws1 = wb.add_sheet(name) | |
| ws1.write(0,0,'Time') | |
| ws1.write(0,1,'Value') | |
| row = 1 #start row | |
| col = 0 #start col | |
| if os.path.exists(f'{self.report_dir}/{scene}/{name}.log'): | |
| f = open(f'{self.report_dir}/{scene}/{name}.log','r',encoding='utf-8') | |
| for lines in f: | |
| target = lines.split('=') | |
| k += 1 | |
| for i in range(len(target)): | |
| ws1.write(row, col ,target[i]) | |
| col += 1 | |
| row += 1 | |
| col = 0 | |
| xls_path = os.path.join(self.report_dir, scene, f'{scene}.xls') | |
| wb.save(xls_path) | |
| logger.info('Exporting excel success : {}'.format(xls_path)) | |
|     return xls_path | 
# 图片
通过 html2canvas 实现
| function screenshot(classname,downloadname) { | |
| let container = document.getElementsByClassName(classname); //page-wrapper | |
| html2canvas(container[0]).then(canvas => { | |
| let imgData = canvas.toDataURL(); | |
| let link = document.createElement('a'); | |
| link.href = imgData; | |
| link.download = downloadname; | |
| let flag = link.click(); | |
| console.log(flag); | |
| }) | |
| } | 
# html
通过模板渲染成一个 html 文件,然后导出
| def make_android_html(self, scene, summary : dict): | |
| logger.info('Generating HTML ...') | |
| STATICPATH = os.path.dirname(os.path.realpath(__file__)) | |
| file_loader = FileSystemLoader(os.path.join(STATICPATH, 'report_template')) | |
| env = Environment(loader=file_loader) | |
| template = env.get_template('android.html') | |
| with open(os.path.join(self.report_dir, scene, 'report.html'),'w+') as fout: | |
| html_content = template.render(cpu_app=summary['cpu_app'],cpu_sys=summary['cpu_sys'], | |
| mem_total=summary['mem_total'],mem_native=summary['mem_native'], | |
| mem_dalvik=summary['mem_dalvik'],fps=summary['fps'], | |
| jank=summary['jank'],level=summary['level'], | |
| tem=summary['tem'],net_send=summary['net_send'], | |
| net_recv=summary['net_recv'],cpu_charts=summary['cpu_charts'], | |
| mem_charts=summary['mem_charts'],net_charts=summary['net_charts'], | |
| battery_charts=summary['battery_charts'],fps_charts=summary['fps_charts'], | |
| jank_charts=summary['jank_charts']) | |
| fout.write(html_content) | |
| html_path = os.path.join(self.report_dir, scene, 'report.html') | |
| logger.info('Generating HTML success : {}'.format(html_path)) | |
|     return html_path | 
| def make_ios_html(self, scene, summary : dict): | |
| logger.info('Generating HTML ...') | |
| STATICPATH = os.path.dirname(os.path.realpath(__file__)) | |
| file_loader = FileSystemLoader(os.path.join(STATICPATH, 'report_template')) | |
| env = Environment(loader=file_loader) | |
| template = env.get_template('ios.html') | |
| with open(os.path.join(self.report_dir, scene, 'report.html'),'w+') as fout: | |
| html_content = template.render(cpu_app=summary['cpu_app'],cpu_sys=summary['cpu_sys'],gpu=summary['gpu'], | |
| mem_total=summary['mem_total'],fps=summary['fps'], | |
| tem=summary['tem'],current=summary['current'], | |
| voltage=summary['voltage'],power=summary['power'], | |
| net_send=summary['net_send'],net_recv=summary['net_recv'], | |
| cpu_charts=summary['cpu_charts'],mem_charts=summary['mem_charts'], | |
| net_charts=summary['net_charts'],battery_charts=summary['battery_charts'], | |
| fps_charts=summary['fps_charts'],gpu_charts=summary['gpu_charts']) | |
| fout.write(html_content) | |
| html_path = os.path.join(self.report_dir, scene, 'report.html') | |
| logger.info('Generating HTML success : {}'.format(html_path)) | |
|     return html_path | 
