2011.11.1好日子,今天博客访问量超过1000了。 2012.01.29,访问量突破2000了. 2012.02.01,访问量突破3000了.继续进步

自动化脚本-TCL语言使用以及个人体会

上一篇 / 下一篇  2011-09-19 21:13:00 / 个人分类:自动化脚本

在我还没正规接触过自动化相关的测试,一直没有使用过脚本语言,都是偏CC++较多,当我在第一个项目接触了TCL之后,发现这个脚本语言虽然不是太多人用,但是非常实用而且很方便.(由于刚开博,所以东西比较少,后续发技术相关的会更细节些)

 

个人总结我工作中实用脚本语言处理的几个任务:处理文本,I/O输入输出,正则表达式,数据匹配,和内嵌html网页语言.

 

第一个处理文本是tcl的强项,他能够通过seek关键来获取你的文本光标所在的位置,可以对你想要的部分进行处理.用得最多的地方就是取你想要的日志.执行动作前获取光标的位置,执行动作后再一次获取光标位置,然后就可以把其中这2个位置之间的信息拷贝出来,进行日志分析.相关指令:

可以使用seek命令来改变文件的访问点:

seek fileId offset   ?origin?         fileId标识的文件的访问点设置为相对于origin偏移量为offset的位置。origin可以是startcurrentend,默认是start。命令的返回值是一空字符串。

例如:seek fileId  2000   改变fieleId标识的文件访问点,以便下次读写开始于文件的第2000个字节。

seek的第三个参数说明偏移量从哪开始计算。第三个参数必为start,currentend中的一个。start是默认值:即偏移量是相对文件开始处计算。current是偏移量从当前访问位置计算。end是偏移量从文件尾开始计算。

 

tell fileId     返回fileId标识的文件的当前访问位置。

eof fileId    如果到达fileId标识的文件的末尾返回1,否则返回0

 

处理文本中,tcl还有个强大的打开文件功能,这里我们经常用来记录日志是非常不错的:

下面介绍上述过程中用到的几个基本的文件输入输出命令。

open name?access?     

open命令access方式打开文件name。返回供其他命令(gets,close)使用的文件标识。如果name的第一个字符是|,管道命令被触发,而不是打开文件。

文件的打开方式和我们熟悉的C语言类似,有以下方式:

r     只读方式打开。文件必须已经存在。这是默认方式。

r+   读写方式打开,文件必须已经存在。  

w   只写方式打开文件,如果文件存在则清空文件内容,否则创建一新的空文件。

w+ 读写方式打开文件,如文件存在则清空文件内容,否则创建新的空文件。

a     只写方式打开文件,文件必须存在,并把指针指向文件尾。

a+   读写方式打开文件,并把指针指向文件尾。如文件不存在,创建新的空文件。

 

 

而下面所说的I/O输入输出,大家要弄清楚一个理念,无论是执行进程,执行telnet,执行文本处理,都要有通道的概念,把一切读写的东西都归类为一种东西,这样你就更好的处理以下的东西了,所以大家需要掌握的就很简单了:putreadafter…..然后注意封装每个不同情况的处理就行了。

 

 

正则表达式和数据匹配大多用来判断结果和作为比较语句用比较多,给一个建议,能尽量不用正则表达式就不用,因为对于测试脚本来说,他的风险相对较大,一般情况下尽量用string

string命令的语法:string   option  arg?arg...?

string命令具有强大的操作字符串的功能,其中的option选项多达20个。下面介绍其中常用的部分。

1.1.1  stringcompare ?-nocase? ?-length int? string1 string2

 把字符串string1string2进行比较,返回值为-101,分别对应string1小于、等于或大于string2。如果有-length参数,那么只比较前int个字符,如果int为负数,那么这个参数被忽略。如果有-nocase参数,那么比较时不区分大小写。

1.1.2  string equal ?-nocase? ?-length  int?string1string2

把字符串string1string2进行比较,如果两者相同,返回值为1,否则返回0。其他参数与8.5.1同。

1.1.3  string firststring1string2?startindex?

 string2中从头查找与string1匹配的字符序列,如果找到,那么就返回匹配的第一个字母所在的位置(0-based)。如果没有找到,那么返回-1。如果给出了startindex变量,那么将从startindex处开始查找。例如:

% string first ab defabc

3

% string first ab defabc 4

-1

1.1.4  string  indexstringcharIndex

 返回string中第charIndex个字符(0-based)charIndex可以是下面的值:

 整数n:字符串中第n个字符(0-based)

 end :最后一个字符

 end-整数n:倒数第n个字符。string index "abcd" end-1返回字符'c'

 如果charIndex小于0,或者大于字符串string的长度,那么返回空。

例如:

% string index abcdef 2

c

% string index abcdef end-2

d

1.1.5  string   last  string1 string2  ?startindex?

参照8.5.3.唯一的区别是从后往前查找

1.1.6  string   length    string

返回字符串string的长度.

 

1.1.7  stringmatch ?-nocase?patternstring

 如果pattern匹配string,那么返回1,否则返回0.如果有-nocase参数,那么就不区分大小写.

pattern中可以使用通配符:

*       匹配string中的任意长的任意字符串,包括空字符串.

?       匹配string中任意单个字符

[chars] 匹配字符集合chars中给出的任意字符,其中可以使用A-Z这种形式

\x      匹配单个字符x,使用'\'是为了让x可以为字符*,-,[,].

例子:

% string match * abcdef

1

% string match a* abcdef

1

string match a?cdef abcdef

1

% string match {a[b-f]cdef} abcdef //注意一定药用'{',否则TCL解释器会把b-f当作命令名

1                                   //从而导致错误

% string match {a[b-f]cdef} accdef

1

1.1.8  string  range   stringfirst  last

 返回字符串string中从第first个到第last个字符的子字符串(0-based)。如果first<0,那么first被看作0,如果last大于或等于字符串的长度,那么last被看作end,如果firstlast大,那么返回空。

1.1.9  string  repeat   string  count

 返回值为:重复了string字符串count次的字符串。例如:

% string repeat "abc" 2

abcabc

1.1.10string   replace    string  first   last?newstring?

  返回值为:从字符串string中删除了第first到第last个字符(0-based)的字符串,如果给出了newstring变量,那么就用newstring替换从第first到第last个字符。如果first<0,那么first被看作0,如果last大于或等于字符串的长度,那么last被看作end,如果firstlast大或者大于字符串string的长度或者last小于0,那么原封不动的返回string

1.1.11string  tolower  string ?first?  ?last?

  返回值为:把字符串string转换成小写后的字符串,如果给出了firstlast变量,就只转换firstlast之间的字符。

1.1.12string  toupper string  ?first?   ?last?

  8.5.11。转换成大写。

1.1.13string  trim   string  ?chars?

  返回值为:string字符串的首尾删除掉了字符集合chars中的字符后的字符串。如果没有给出chars,那么将删除掉spacestabsnewlinescarriage returns这些字符。例如:

% string trim "abcde" {a d e}

bc

% string trim " def

> "

def

1.1.14string trimleft string?chars?

 8.5.13。不过只删除左边的字符。

1.1.15string  trimright   string  ?chars?

 8.5.13。不过只删除右边的字符。

 

 

 

最后总结:本人第一次能够完全做测试持续集成的过程包括:自动化检测安装包,自动拷贝和卸载安装,自动执行很多用例,自动出结果,把失败用例邮件发给各个关注的人都是全自动每日定时跑的,其中90%都是用tcl完成,虽然只是项目的代码实施者,但是后续有机会把tcl用在新的项目中,试着作为架构搭建的角色完成一个自动化项目,还是一个不错的脚本后盾。


TAG:

TestFuture's space 引用 删除 TestFuture   /   2011-09-20 14:12:07
以后俺也要用到TCL了,谢谢楼主分享1
 

评分:0

我来说两句

acbennn

acbennn

站在云端看浮云,晕. CSDN的博客:http://blog.csdn.net/bullswu/article/details/6798437

日历

« 2024-04-28  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 60161
  • 日志数: 44
  • 建立时间: 2011-09-18
  • 更新时间: 2013-09-22

RSS订阅

Open Toolbar