• 0
  • 0
分享

  1.背景

  在性能测试过程中,往往需要监控服务器的性能情况,并记录这些性能指标结果。不论是云下数据库服务器还是应用服务器,都可以通过nmon来进行监控,设定打点间隔和打点次数,将性能指标情况保存成nmon文件,并通过工具,如Excel插件Nmon_Analyzer、Java GUI工具nmon visualizer等读取nmon文件内容,分析采集结果。但当监控的服务器数量较多时,依次采集多个nmon文件中的性能指标结果会耗费时间,同时,人工读取和记录数据也可能会出现记录错误的偶然误差。因此我们可以尝试使用自己熟悉的编程语言,如Python等,来开发一款简单易实现的小工具,用于自动采集性能测试nmon文件中的性能测试指标。

  2. 工具介绍与设计

  工具实现的基本思想是逐个扫描指定路径下的nmon文件,根据nmon文件的内部格式,提取出目标性能指标数据,再对提取出来的数据进行加工处理,得到结果,并将结果自动保存到新生成的结果Excel文件中。为了更直观地获取用户输入的nmon文件路径及结果保存路径,我们可以编写GUI界面,利用界面上的文本输入框来获取用户的输入,并采用界面上的按钮来触发这一采集事件。

2-1.jpg

图1 工具设计流程图

  3. 工具实现

  (1)导入所需模块

  由于我们的工具中包含对文件和路径进行操作,这需要依赖os模块实现。在逐行读取nmon文件内容时,用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode。re模块是python独有的匹配字符串的模块,利用正则表达式对字符串进行模糊匹配,提取自己需要的字符串部分,使用该模块可以实现逐行扫描进行模糊匹配查找到CPU和内存的相关性能指标。xlwt库的作用是将数据写入Excel表格中。Tkinter 是 Python 的标准 GUI 库,导入 Tkinter 模块后可以使用控件快速的创建 GUI 应用程序。 tkinter.StringVar 能自动刷新的字符串变量,可用set和get方法进行传值和取值,以此来接收用户输入。

2-2.png

图2 代码-导入所需模块

  (2)窗口的实现

  利用Tkinter模块创建窗口并插入输入框控件用来获取用户输入的路径信息,输入框的内容存储到StringVar当中,设置按钮Button用于和鼠标点击事件绑定。

2-3.png

图3a 代码-窗口的实现

2-4.png

图3b 窗口的实现图

  (3)编写事件代码——求CPU平均利用率的函数

  不同版本的nmon文件内部格式略有不同,因此在编写程序时,要先了解目标版本的内部结构,用来确定字符串模式匹配时,需要利用nmon文件中性能指标相关内容的哪些特征。

  为了计算均值,需要获取nmon文件中记录的打点次数。通过了解nmon文件中AAA参数是关于操作系统以及nmon本身的一些信息,可以查找该行来进行提取。

2-5.png

图4 代码-获取打点次数和打点间隔

  CPU_ALL参数是对所有CPU的概述,显示所有CPU平均占用情况,将记录的CPU占用率逐个取出存放在数组里,并求数组元素的平均值,即为整个监控期间CPU的平均利用率,函数将该值返回。

2-6.png

图5 代码-求CPU平均利用率

  (4)编写事件代码——求内存均占用率的函数

  类似地,通过MEM参数获取内存占用情况,与CPU情况不同的是,该参数行包括多项内存相关指标,而在监控性能指标时,我们常用公式1来计算内存的占用率,因此需要从MEM参数中提取相关指标,包括memtotal、memfree、cached、buffers,按照公式进行计算,并返回内存占用率。

公式1 内存占用率常用计算公式

2-7.png

图6 代码-求内存占用率

  (5)编写事件代码——鼠标点击事件

  该事件用于和界面上的按钮Button进行绑定,实现当点击按钮后的一系列操作:从输入框取nmon文件路径和目标保存路径,生成Excel文件并创建工作表,写入默认的表头内容,调用求CPU平均利用率的函数和求内存均占用率的函数,将返回的值写入Excel文件并保存。

2-8.jpg

图7 代码-鼠标点击事件

  4. 总结

  该工具是基于Python语言的简单实践,可以实现批量自动提取nmon文件中的性能指标结果,并且可以沿用本思路根据需要对工具的功能进行修改或扩展。使用本工具进行性能结果的自动采集相比人工读取数值更加节省时间,并且避免了记录时出现错误的偶然误差,有助于提升准确度和测试效率。


作者:李婧媛   

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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   前言  无论什么自动化,部分测试用例均会运用到参数化,参数化可以帮助我们覆盖更多的测试用例,减少重复代码逻辑,然而自动化中也有多种实现参数化的方法,比如UnitTest的DDT模式,Pytest的fixture,以及Pytest的parametrize均可以实现测试用例的参数化。  今天小编介绍新的一种方法,通过hook函数来实现测试用例的参数化,废话不多说,直接进入正文。  pytest_generate_tests  pytest_generate_tests钩子函数是Pytest框架中用来动态生成测试用例参数的钩子函数。通过它,我们可以在运行时动态地生成测试参数,从而避免手动编写重复...
            0 0 1417
            分享
          •   前言  什么是自动化测试  把人对软件的测试行为转化为由机器执行测试行为的一种实践。  例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来。  本质是用代码去测试另一段代码,属于一种软件开发工作,已经开发完成的用例还必须随着被测试对象的改变而更新,因此,还有额外的维护成本。  自动化测试有哪些分类  按测试目的分类:  · 功能自动化测试  · 性能自动化测试  按测试对象分类:  · Web应用测试  · APP测试  · 接口测试  · 单元测试  为什么需要自动化测试  可以替代大量的手工机械重复性操作,测试工...
            0 0 995
            分享
          •   先来跟大家同步下我们的大背景。我们按照功能方向分成若干开发小组。每个开发小组有两到三位产品经理,有六七位研发和两位测试,形成一个相对稳定的交付小组。禅道软件团队的迭代速度比较快,都是以周为单位进行迭代。目前由于回归测试的压力比较大,所以是双周对外发布版本。产品目前主要是项目管理软件的开源版、企业版和旗舰版三个大的方向。  我们以时间线来讲一下产品团队的日常。我们从周一下午开始讲起,按照流程的先后顺序讲会比较顺。  周一下午到周二的这一天半左右的时间里,产品经理团队要着手准备后面两个迭代的用户故事列表。这一天半时间中,搭档的两位产品经理会进行各种讨论交流,也会和研发骨干进行沟通交流,确认一些...
            0 0 735
            分享
          • 新浪科技讯10月21日上午消息,苏宁易购宣布与美团达成战略合作,消费者登录“美团”或“美团外卖”App搜索“苏宁易购”,即可下单购买手机、电脑、生活家电类产品,最快30分钟送达。苏宁易购表示,未来还将持续与美团推进即时零售共建,探索空调、冰洗等大家电即时配送服务模式。据悉,苏宁易购全国超600家门店已经完成美团入驻,覆盖175个城市,双方表示,将继续深化合作,计划在2023年入驻门店超1000家。作者:佚名原文来源:新浪科技_新浪网 (sina.com.cn)
            0 0 740
            分享
          • 一.测试用例的基本要素1.什么是测试用例这个在前面其实已经说过了,具体可以看软件测试的基本概念 这篇博客,这里就简单介绍一下:测试用例是向被测试系统发起的一组集合,包括测试环境,测试步骤,测试数据,预期结果!2.为什么软件测试人员要写测试用例?这里有如下几个原因:测试用例是测试执行的依据;测试用例可以复用,在进行回归测试的时候就不用再重新编写了;测试用例可以衡量需求的覆盖率;后人可以借鉴;手工测试用例是自动化测试的依据二.测试用例的设计方法1.基于需求设计测试用例需求是测试人员进行测试的依据,测试人员分析需求,验证需求的合理性和正确性,无二义性,从需求当中提取出测试项,根据测试项进行进一步的细...
            0 0 1835
            分享
      • 51testing软件测试圈微信