
1.背景于性能测试进程里, 常常得去监控服务器性能的详情状况, 还要把这些性能指标的结果给记录下来。不管是云下的数据库服务器也罢, 或者是应用服务器也好, 都能够借助nmon来实施监控, 将打点间隔设定起来, 打点次数也设置好, 把性能指标的情形保存成nmon文件, 接着通过工具, 像Excel插件, Java GUI工具nmon等等, 去读取nmon 文件的内容, 对采集结果展开分析。但是, 要是监控的服务器数量比较多, 那么依照顺序去采集多个nmon文件里的性能指标结果, 这会花费时间, 与此同时, 凭借人工去读取以及记录数据, 也有可能出现记录错误这种偶然误差。所以呢, 我们能够试着运用自己熟悉的编程语言, 像之类的, 去开发一款简单而且容易实现的小工具, 用来自动采集性能测试nmon文件中的性能测试指标。2. 工具介绍与设计工具要实现的基本思想是, 逐个去扫描指定路径下的nmon文件, 需依据nmon文件的内部格式, 从中提取出目标性能指标数据, 接着对提取出的数据进行加工处理, 从而得到结果, 然后将结果自动保存到新生成的结果Excel文件里。为了能更直观地获取用户输入的nmon文件路径以及结果保存路径, 我们可以编写GUI界面, 靠此界面上的文本输入框来取得用户的输入, 同时采用界面上的按钮触发这一采集事件。图1 工具设计流程图3. 工具实现1导入所需模块关于我们的工具, 其中存在对文件以及路径展开操作之举, 这一行为是以依赖os模块来达成实现的。在针对nmon文件内容进行逐行读取期间, 要运用所提供的open方法去明确指定所打开文件的语言编码, 它会于读取之时自行转换为内部状态。re模块乃是独具特性的用于匹配字符串的模块, 借助正则表达式针对字符串开展模糊匹配操作, 从而提取自身所需要的字符串部分, 借助该模块能够达成逐行扫描进而通过模糊匹配查找到CPU以及内存的相关性能指标。xlwt库的作用在于把数据写入到Excel表格当中。有的某个既定标准的GUI库, 在导入特定模块之后, 能够借助控件较快地去创建GUI应用程序。存在着一种具备能实现自动刷新特性的字符串变量可运用set以及get方法来达成传递值与获取值的操作, 通过这样的方式去接收用户所输入的内容。图2 代码-导入所需模块2窗口的实现通过利用模块, 来创建窗口, 且插入输入框控件, 以此用来获取用户所输入的路径信息, 输入框的内容会被存储到当中, 还要设置按钮, 用于和鼠标点击事件进行绑定。图3 代码-窗口的实现图3 窗口的实现图3编写事件代码——求CPU平均利用率的函数nmon文件的不同版本之间, 其内部格式存在着少许差异, 所以在编写程序之际, 需要先去了解目标版本的内部结构, 以此来确定在进行字符串模式匹配时, 要借助nmon文件里性能指标有关内容的何种特征。要计算均值, 就得获取nmon文件当中记录下的打点次数, 经由知晓nmon文件里AAA参数是有关操作系统以及nmon自身的某些信息, 能够查找这一行来予以提取。图4 代码-获取打点次数和打点间隔参数是针对所有CPU进行的概述, 它会展示所有CPU平均占用的状况, 把记录下来的CPU占用率逐一进行取出, 进而存放在数组当中, 并且对数组元素求取平均值, 而这个平均值就是整个监控期间CPU的平均利用率, 函数会将这个值进行返回。图5 代码-求CPU平均利用率4编写事件代码——求内存均占用率的函数与此类似, 借助MEM参数来获取内存占用状况, 跟CPU情况有着差异的是, 此参数行涵盖多项与内存有关的指标, 而当对性能指标予以监控时, 我们惯例采用公式1借以去计算内存的占用率, 所以要从MEM参数里提取相关指标, 覆盖、覆盖、覆盖、覆盖, 依照公式展开计算, 进而返回内存占用率。公式1 内存占用率常用计算公式图6 代码-求内存占用率5编写事件代码——鼠标点击事件此事件拿来跟界面里的按钮开展绑定, 达成在点击按钮之后的一连串操作, 亦即从输入框获取nmon文件路径以及目标保存路径, 生成Excel文件并创立工作表, 写入默认的表头内容, 调用求CPU平均利用率的函数与求内存均占用率的函数, 把返回的值写入Excel文件并予以保存。图7 代码-鼠标点击事件4. 总结此工具是依照语言的简洁实践构建的, 能够达成批量自动提取 nmon 文件里的性能指标成果, 而且能用本思路按要求对工具功能予以修改或者扩展。运用该工具实施性能结果的自动收集相较于人工读取数值更能节省所需时间, 还规避了记录时产生错误的随机误差, 对提高测定的精准度以及测试效率有所助益。**推荐一个「自动化测试学习交流群」给大家请予以关注, 并且私信回复: “测试”, 凭借此操作, 便能够不用花费任何费用就拿到专门用于软件测试方面的学习资料, 与此同时, 还能够进入群组展开学习交流活动啦。