awk之performance 应用
时间:2010-11-07 来源:东莱海鲜
首先说,系统越大,它的测试就会越复杂,往往让人望而却步,从另个方面来说,也只有必要的测试工作做了,对系统的修改,更新才会让人更加放心。脚本的确在测试中的作用不可小觑,许多繁杂的工作,如果使用合适的脚本(如 sed, awk,shell ,python )等等,测试中许多交互性的工作可以省去很多,提高测试的自动化程度,对以后的工作来讲,也是少了许多后顾之忧。如果的开发的脚本的结构性还比较好的话,那就是做一件一劳永逸的事情了。
在评测系统的performace(性能)时,常常需要对log,trace 进行处理,提取其中某些字段数据,并加以处理。当然最理想的状况是能将这些数据存入excel表格,甚至能有图表的形式,使评测的结果更加直观。
最初的时候,并没有使用脚本,手工的从trace中抽取数据,或者是半自动的形式,如单纯使用某个命令,awk或者grep。反正数据量也不算太大。后期需要对数据的处理时就慢慢发现,如果能有自动化的处理环境还是能省不少力的。后来又测了几次Performance,其中要测的指标也是在慢慢的摸索的,可能会有所变化,同时,测试的次数也会有多次,重复劳动相当多,如此,自动化的测试的必要性更加突出。
而对文字的处理,Unix下比较著名的当属sed 和awk了. Sed 是做非编辑性修改的绝佳工具。 Awk呢,对于这种提取文字,并处理也是一个不错的选择。
Awk可以使用命令,也可以通过脚本对文本进行处理。
就语法而言,和大多数的解释脚本语言一样,awk脚本属于非强制行语言,变量可以随时定义使用。
就结构而言,Awk 可以分为三个部分。 Begin , 对每行的处理,end 。如果分析一下,就会发现,这个结构是非常适合对一个文件进行分析。Begin, End类似于类的析构与构造函数。
在trace进行performance分析时,awk在文本处理是可以理解为,文本处理前(begin),一些变量,环境结构的设置;文本处理后(end),对数据的整理;文本处理时,从target 文件中抽取需要得到字段,并存储成rawdata。就我在performance测试中awk使用经验,以上可以为awk使用的一个基本的使用指导原则。而往往而言,在刚开始写awk脚本时,会在文本处理时直接对原始数据进行处理,这样做的缺点是数据的提取与处理混合在一起,当对原始的数据的处理策略由于某种原因发生变化时,整个程序的结构也要进行一些重构。
个人的经验来说,在对文本处理,尤其是这种提取出某些字段并处理后而期望得到某种结论时,最后的结果往往有几点决定,
1) 原始数据
2) 对原始数据的处理策略
如果由于其他因素影响导致原始数据不太理想,可能合适的处理策略可以弥补;同样,如果对同样的原始数据采取不同的处理策略,那么结果的侧重点,甚至精确度也会不一致。
我在在设计performace 测试的脚本时,大致上是按照这三部分功能划分设计的,即文本处理前的准备阶段,文本处理中的原始数据提取,以及文本处理后的对原始数据的处理。后期处理策略上采用两种处理策略,减少由于不同的对原始数据的处理策略而得到的不同的performance结果所带来的误差。