• 15
  • 15
分享

  一、背景介绍

  IT系统的性能测试与优化是一项复杂、富有挑战性的工作,它主要通过某些特定的方式、按照一定的策略,对被测试的系统进行施压,获取该系统的响应时间、运行效率、资源利用情况等指标,来评价系统是否满足用户性能需要。其中,重要的环节之一就是监控系统的运行状况,实时查看CPU,内存等系统资源数据,并做好记录情况,以便定位系统瓶颈问题,找到系统性能优化方向。

  伴随着业务和技术的快速发展,部署IT系统的环境资源类型和数量日益增多,如何便捷的将系统环境各项资源的使用情况记录保存到本地,以便于后续的对比分析,是目前测试人员在日常工作中需要面对的问题。

  本文采用Selenium Web自动化库开发实现了针对Grafana平台的图表截图的本地化工具。该工具可以实现指定监控服务器,指定性能时间段,实现将该时间段服务器的相关性能图表截图保存至本地。

  二、监控可视化工具Grafana

  Grafana是一个开源的度量分析和可视化分析平台,可以通过将采集的数据查询之后可视化的进行展示,并且具有通知告警的功能。

  Grafana工具具有以下六大特点:

  1)可视化:快速和灵活的客户端图形具有多种选项。面板插件提供许多不同的可视化指标。

  2)通知提醒:以可视化方式定义最重要的指标警报规则,Grafana将不断计算并发送通知,在数据达到阈值时执行告警通知。

  3)动态仪表盘:使用模板变量创建动态和可复用的仪表盘,这些模板变量作为下拉菜单出现在仪表板顶部。

  4)数据源:Prometheus,Graphite,InfluxDB,OpenTSDB等各种数据源,同时也支持自定义的数据源。

  5)注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完成的事件元数据和标记。

  6)过滤器:过滤允许动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。

1-1.png

图一 Grafana可视化监控数据样例

  Grafana可视化工具强大,同时也具有分享和截图的功能,但是其Snapshot的截图均保存于线上,对于查看历史相关监控图表不是很方便,因此本人萌生了做一个自动化小工具的想法。

  三、基于Selenium的Grafana自动化截图工具

  Selenium是一个用于Web应用程序测试的工具,它可以直接运行在浏览器中,通过一系列命令来模拟用户操作。近几年,Selenium被越来越多的公司采用作为Web自动化测试的轻量级框架,它可以支持对多浏览器进行测试,如IE,Firefox,Safari,Chrome,Android手机浏览器等。

  当使用Selenium实现自动化测试时,主要需要以下三个部分:

  1)测试脚本:可以是Python,Java编写的脚本程序。

  2)浏览器驱动:驱动是根据不同的浏览器开发的,不同的浏览器使用不同的Webdriver驱动程序并且需要对应相应的浏览器版本。

  3)浏览器:目前Selenium支持市面上大多数浏览器。

  本文实现的Grafana监控图表自动化截图的小工具是基于Selenium进行开发的。

  在Grafana平台上查看性能测试过程中手动查看系统监控数据的步骤为登录平台,选择服务器IP,设置所需要查看的时间段,最后点击确定按钮,Grafana平台将自动的把该时间段的所有数据汇总在表格里以图表的形式进行展示。

  基于Selenium框架,采用Python编写自动化程序,实现在不需要手动打开浏览器的情况下,指定服务器IP,时间段,自动的将该时间段的监控图表保存至本地,之后直接在本地查看即可。

1-2.png

图二 实现流程

  1、手动传参数

  使用Python的Argparse库实现参数获取。Argparse是Python自带的命令行参数解析包,当代码需要频繁修改参数时,通过该工具可以将代码分离开来,让代码更简洁。

1-3.png

图三 指定参数的说明信息

  2、URL拼接

  对Grafana平台查询特定时间段操作所产生的URL进行了分析,找到了URL拼接的规律,实现URL的拼接。

  通过Grafana平台服务启动的IP地址,端口号,可以对Grafana平台进行访问。接下来选择被监控服务器的地址,监控的性能测试时间段,Grafana则会跳转到具有相应Dashboard的界面。平台访问时将用户选择的开始和截止标准时间“%Y-%m-%d %H:%M:%S”转换为13位的时间戳,随后拼接在URL的最后。通过上述分析,实现了动态传参,并完成标准时间转换为时间戳函数,得到了拼接后的URL。

  3、浏览器无界面模式自动发送HTTP请求

  示例项目中采用的是7.6版本的谷歌浏览器,首先需要将相应版本的谷歌浏览器驱动放在与python.exe同一层目录下,这样即使不手动指定浏览器驱动位置,也可以使Selenium自动打开浏览器。

  Selenium默认的是浏览器弹出的模式,由于我们只需要在运行完看到相应的所需监控图表截图即可,不需要在前台看到打开浏览器,选择时间段并截图的这一些列操作,因此,我通过chrome_options.add_argument('headless')设置了浏览器无界面headless模式。接下来指定webdriver.Chrome(),通过driver.get(url)对第一步拼接好的url发起自动的访问。

  4、JS脚本获取整个web页面

  通常在同一台服务器上部署的监控信息较多,使用Grafana查看时需要使用下拉框,直接截图只能实现浏览器当前页面的截取,因此通过JS脚本实现获取整个Web页面。使用time.sleep()函数推迟调用线程的执行,通过driver.execute_scrip()函数执行JS脚本,在推迟的1秒中获取到整个页面的宽和高的数据。

  5、截图并保存至本地

  通过driver.set_window_size(width, height)方法将浏览器的宽和高设置为通过JS脚本获取到的数据,再使用time.sleep()推迟线程1秒,在这期间执行对整个Web页面的截图操作。截图过程通过driver.save_screenshot(pic_name)函数执行,将按照给定的宽和高对页面进行本地化保存。完成上述动作后关闭浏览器。

  6、打包为应用程序

  为便于工具的推广和使用,采用pipinstaller工具对整个程序和代码中使用到的相关依赖包打包成了应用程序exe文件。运行成功之后,相关截图也会保存在当前应用程序的同一级目录下。

1-4.png

图四 应用程序和本地化截图

  以下是自动化截图工具的操作演示:

1-5.png

图五 自动化截图工具演示

1-6.png

图六 保存至本地的截图展示

  四、总结

  本文所述的基于Selenium开发的自动化截图工具,可以使我们在性能测试中不用频繁的在浏览器中打开Grafana监控页面就可以直接在本地查看所需要的监控数据,方便了对系统资源历史监控情况的查询也方便了很多,大大提高了工作效率。后续我们将结合实际工作,对该工具进行优化和完善,使它能够适应更复杂的场景。



作者:方李雪子、尚思超   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   台积电的 5nm 和 3nm 工艺是该公司在市场上"最热门"的产品之一,据报道,这家台湾巨头的利用率达到了 100%。众所周知,台积电是迄今为止半导体行业中最具主导地位的公司之一,原因很简单,因为英特尔代工厂和三星等竞争对手在产品供应方面有所懈怠,这就使得这家台湾巨头可以充分利用不断涌现的需求。  根据Ctee的报道,台积电预计到明年5纳米生产线的利用率将达到100%,理由是人工智能行业的需求将大幅上升。 这一进展充分显示了台积电在现代市场中的主导地位,不给竞争对手任何空间。  台积电的 5nm 需求主要是由英伟达的 Blackwell B200 系列 AI GPU 驱...
            0 0 331
            分享
          • 问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决。首先,将问题提交到缺陷管理库里面进行备案。然后,要获取判断的依据和标准:根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;根据用户的一般使用习惯,来确认是否是缺陷;与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪。等待测试经理做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道...
            11 12 3101
            分享
          •   1、基本概念:  将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件高层设计进行测试,一般来说是以模块和子系统为单位进行测试。  2、集成测试包含的层次:  1)模块内的集成,主要是测试模块内各个接口间的交互集成关系;  2)子系统内的集成,测试子系统内各个模块间的交互关系;  3) 系统集成,测试系统内各个子系统和模块间的集成关系。  集成测试的本质:都是测试接口之间的关系。  补充:集成测试既有白盒测试的成分,也有黑盒测试的成分,结合了白盒测试和黑盒测试的特点,一般把他归入灰盒测试。  3、集成测试和软件概要(高层)设计的关系:  软件概要(...
            0 0 1281
            分享
          •   摘要:在实际项目中,抛开产品需求的质量不说,但就研发质量保证而言,测试人员在测试阶段发现大量的实现类bug,每天拉着开发人员修bug;要么在临近上线的时候,发现了一个重大问题,导致修复验证时间不够,但又只能“硬着头皮”上线。解决这些问题的方法或许多种多样,但这里来聊聊如何使用研发质量保证前置来尽可能避开这些问题。  关键词:研发质量,质量保证前置,尽早暴露问题,上线风险  背景  在实际项目中,抛开产品需求的质量不说,但在研发质量保证上面,测试人员往往需要时不时的面对不少头痛的情况:  开发团队来了一个新人,本来需求量不大,但测试人员在测试时发现连主流程都跑不通,无法走下去;  这次有一个...
            0 0 2252
            分享
          •   测试课程免费送,点击下方链接填写测试行业调查问卷,提交后即刻获得!链接:http://vote.51testing.com/  软件测试行业供需现状  随着敏捷、DevOps等开发模式的引入以及大数据治理与应用、人工智能机器学习与深度学习的应用的发展、软件交付周期逐渐缩短、技术复杂度不断提升对测试人员质量保障与效率提升等方面提出了越来越高的要求。因此,对人员的要求也是在不断提高的,一方面响应基础功能需求的手工测试人员基本饱和,另一方面懂测试的测试开发面试达标者比例过低。  软件测试行业的发展现状  通过之前对近几年《软件测试行业现状报告》的解读,以及结合对当下软件测试左移与右移思考,总结了...
            1 1 1863
            分享
      • 51testing软件测试圈微信