多语言展示
当前在线:452今日阅读:2今日分享:38

文本编辑小工具

我们在做功能测试或者性能测试总结时,进行要对日志文件进行分析、过滤以及合并等操作,目前我们通过linux shell的awk、sed以及手工相结合的方式完成(由报告的复杂程度决定),测试人员在编写复杂的awk或者sed时,经常会无从下手,这样会浪费很多的工作时间。本着测试人员可配置以及完全是简单规则表达式能够完成的目标,设计了这个通用文本编辑工具。适读人群:测试设计师、测试工程师
工具/原料
1

工具说明

2

使用说明

3

使用bin/startup.bat脚本进行启动,启动后根据提示进行参数输入:

4

类型filter:对一个文件进行规则运算,srcFile:源文件的路径,destFile 过滤后目标文件的存放路径,rule:进行过滤或加工的规则,encoding:源文件的编码方式(默认是UTF-8)。

5

类型merge:对两个文件进行合并,主要根据两个可以进行合并。srcFile1:需要合并的第一个文件,srcFile2:需要合并的第二个文件,destFile:合并后文件存放的路径,pos1:源第一文件的key位置,pos2:第二文件的位置,,encoding:源文件的编码方式(默认是UTF-8)。

方法/步骤
1

实现原理将过滤或者加工的内容,从自然语言转换为函数表达式方式,然后程序通过解析函数表达式,来完成文件记录的处理。目前支持括号来实现优先级,支持加减等操作,支持if条件表达式。

2

实现的函数表达式列表函数参数返回值说明SUMInt i1,int2 …Int计算总和STRCATStr s1,Str s2 …Str字符串连接LENStr s1Int计算字符串长度MD5Str s1StrMD5计算SHA1Str s1StrSHA计算SUBSTRStr s1,int begin,int endStr字符串截取INDEXStr s1,Str s2Int获得子字符串在指定目标字符串出现的位置CONTAINStr s1,Str s2Bool是否包含给定的字符串SPILTStr s1,Str s2数组对给定的字符串按照指定的分割符进行分割EQUALStr s1,Str s2Bool判断字符串是否相等PARSEINTEGERStr s1Int将字符串转换成整形REPLACEStr s1,Str s2,Str s3Str将目标字符串里面特定的字符用其他字符替换

3

案例一功能描述:获得每次传递的文件名称以及传递的记录条数,即分析下面的文件 ssjt-info.log.2014-06-26-09:2014/06/26 09:19:34:1934 (MsgSendTmcCountThread)INFO : sendSignallingCountToTmc context :407301,A94009_15010_CS_200.AVL . userId :cmcc_test1 cityId :024ssjt-info.log.2014-06-26-09:2014/06/26 09:20:34:2034 (MsgSendTmcCountThread)INFO : sendSignallingCountToTmc context :432162,A94009_15010_CS_200.AVL . userId :cmcc_test1 cityId :024生成如下的内容:A94009_15010_CS_200.AVL,407301A94009_15010_CS_200.AVL,432162使用工具的规则配置: STRCAT(SUBSTR(\”line\”,INDEX(\”line\”,\”,\”)+1,INDEX(\”line\”,\” .  userId\”)),\”,\”,SUBSTR(\”line\”,INDEX(\”line\”,\” context:\”)+10,INDEX(\”line\”,\”,\”)))”;

4

案例二功能描述:对于文件中包含特殊内容的记录进行输出,如将下面包含的download的关键字的记录都输出到一个文件。 FTPDownload读取文件A94009_15010_CS_200.AVL结束,download 225916290B-7s: sendSignallingCountToTmc context :437523,A94009_15010_CS_200.AVL . 使用工具的规则配置如下: If EQUAL(SPILT(\”line\”,\”,\”)1.toString(),\”download \”) then STRCAT(\”line\”,\”,123\”);

5

案例三功能描述:将文件中第三个字段都加10000 91AE7232D2DC5DC4BFA5C41AA6F64893,209,16792,13303,010,002,000,16791740,167805321FA03E45F31400CDABD7570605893AEE,209,16789,10122,007,000,000,16793475,16780548使用工具的规则配置: STRCAT(SUBSTR(\”line\”,0,48),PARSEINTEGER(SUBSTR(\”line\”,48,53))+10000,SUBSTR(\”line\”,53,89))

6

案例四功能描述:合并两个文件 ,对两个文件按照key进行外联结操作。 如:A.txt文件A94009_15010_CS_200.AVL,407301A94009_15010_CS_200.AVL,407302A94009_15010_CS_200.AVL,407303 B.txt 文件A94009_15010_CS_200.AVL,407301A94009_15010_CS_200.AVL,407303合并之后为:

7

使用工具的规则配置:执行使用命令行,传入位置即可

8

二次开发说明在我们实际使用过程中,可能该工具不支持一些特殊的函数操作,使用者可以自己开发相应的函数表达式,新函数类需要继承Operator接口。下面以字符串判断函数为例,进行说明//函数表达式必须继承Operator类public class EQUAL extends Operator {    /**     *     */     private static final long serialVersionUID = 1L;    public EQUAL(String aName) {       this.name= aName;    }    //Oject为传入的参数列表,严格来讲应该对传入的参数的个数以及类型做校验    public Object executeInner(Object[] list)throws Exception {       return list[0].toString().equals(list[1].toString());    }}

注意事项
1

与awk比较

2

优点:不需要学习awk的语法,只需要掌握函数的作用以及了解文本定义的格式即可。

3

缺点:目前不支持自定义变量,不支持for循环,所以没法操作,两行记录进行比较的功能。

推荐信息