没有最好,只有更好!

TCL脚本语言学习

上一篇 / 下一篇  2009-03-01 23:36:18 / 个人分类:测试工具

####################################51Testing软件测试网_9fN%m0x&C
#                                  #
h HS-J)WqGtB0#           TCL脚本学习笔记          #51Testing软件测试网F$T$o0S(s?#]!Z@
#                                  #51Testing软件测试网7VF1V)QI_1Z:H
####################################

*[AH7L&U,w O"t0

【摘要】:这里通过在TCL命令窗口来学习TCL的基本的命令语法。

c8e*_5Y3a p@0

% set a 10 ; set b "testing"
'p o'QpQ3rJ4Fa0testing
A-t0i+E#[(JQ,\\*N0QH0% set x 1051Testing软件测试网~*W)Mez;B
1051Testing软件测试网;KE.?? DI
% set y x+100
1c,R%z1e!nbWh2c0x+10051Testing软件测试网7Svj7m:N1t!O{
% set y $x+10051Testing软件测试网1vI4dWJ+jE@
10+100
.E2Nbyr^0% set y [expr $x + 100]51Testing软件测试网JWs9H lzzJ]
110
8rBl(|"l!M0% set y [set z 200; expr $z + 100;]51Testing软件测试网F Fr)j8v'K Vz
30051Testing软件测试网-{ P:h)Wky8ev
% puts 反斜杠置换51Testing软件测试网f.H8B1E+{Pwkb
反斜杠置换51Testing软件测试网E_X$Y7u"q!g L
% set msg multiple\ space
c1r GrR3}#ap#U0multiple space
K-r8o4en^P0% set msg multiple space
IqVr&u0wrong # args: should be "set varName ?newValue?"51Testing软件测试网p8sEd4[XL
% puts c出现错误的原因是后面的元素内部不能允许有空格,上上一例就用反斜杠起作用51Testing软件测试网 d c4A b p6Qq$SE
c出现错误的原因是后面的元素内部不能允许有空格,上上一例就用反斜杠起作用
5l#d.gU Z"Ob0% set msg money\ \$3333\ \nArray\ a\[2]
tTO Ay0gA*b0money $333351Testing软件测试网w.vC#x1r
Array a[2]51Testing软件测试网*iL|+Ga v?+H6t
% puts 其中\n还是换行符
%|Z(q [z~~0其中
`A UjJ*NV0还是换行符51Testing软件测试网V vg2eQU Q
% puts 其中\\n还是换行符
N UvF.F })ou9J0其中\n还是换行符
&dv7]'nE? P0% puts \\作用多个空格的例子
AG!S8w5m,u v#{H0\作用多个空格的例子
4Gw D d2F%g5R0% set msg money\  Hello!
4vQz0r DeP[!E0wrong # args: should be "set varName ?newValue?"51Testing软件测试网K"T9CTs)I4aV%M7@&y
% puts 明显不能作用于多个字符51Testing软件测试网ca+k:s cV,{
明显不能作用于多个字符51Testing软件测试网0f'Fy;[L nk z
% puts 双引号\ 花括号
,{g Eb/{0双引号 花括号
6i;^Zs_;A&D!^0Ao0% puts "双引号的作用:\n 对各种分隔符,除换行符\\n及\$和\[]照常处理之外不作处理。"51Testing软件测试网Q`ej(N H5X#S z
双引号的作用:51Testing软件测试网cze,@mG
 对各种分隔符,除换行符\n及$和[]照常处理之外不作处理。51Testing软件测试网\G%@)I S)T%_(S
% puts "花括号的作用:\n  所有特殊字符将成普通处理,失去特殊意义。"51Testing软件测试网(D$K c aj
花括号的作用:51Testing软件测试网b8?&W*L9G:Z I
  所有特殊字符将成普通处理,失去特殊意义。
s1U L7ur-D0% set x 100 ; set y "{$x ddd"51Testing软件测试网~F ^M$f&^ z
{100 ddd51Testing软件测试网8L*MV7^4} |
% set x 100 ; set y {/n$x [expr $x + 100]}; puts y
+b;a;k&K9b |A0y51Testing软件测试网 S:n3ci(z.R,B(m}:H
% set x 100 ; set y {/n$x [expr $x + 100]}; puts $y
w)_2}+\#G/W9l Q1P0/n$x [expr $x + 100]51Testing软件测试网:wP0d7OfWL'u
% puts 注释符\# :作用于一整行。注意的是\#要放在第一个字符位置。
Vb| tA W/PQ-@0can not find channel named "注释符#"51Testing软件测试网/Q6[)E'BG [ Vy#|6J
% puts 注释符\#:作用于一整行。注意的是\#要放在第一个字符位置。
2zvnq:^/o+N`J0注释符#:作用于一整行。注意的是#要放在第一个字符位置。
x {,P8K$JM(q ?b0% #这是一个注释51Testing软件测试网 W}{7BeN$N7o
% set a 100 #不是一个命令51Testing软件测试网}@Y;eL/{
wrong # args: should be "set varName ?newValue?"51Testing软件测试网NF.y1A1O
% set a 100;#这是一个命令
Jts8i O B0100;#这是一个命令51Testing软件测试网 WX:u~X&X
% set a 100 ;#这是一个命令
X9d.W~$p$]0wrong # args: should be "set varName ?newValue?"51Testing软件测试网.`eEQM%kO7Z V
% puts #############简单变量################\n##################################51Testing软件测试网4| E&QU"K ^H(P3eZ h
#############简单变量################51Testing软件测试网u;I+^Y _8c+vH9Y:S
##################################
$i[ @!av^/C0% puts 变量=名字+值;名字和值都可以是任何字符。51Testing软件测试网8j%e&pGe0P^-G]
变量=名字+值;名字和值都可以是任何字符。51Testing软件测试网m\P#xO
% puts a51Testing软件测试网#Dl)F'Kn/cF(yG
a
c1[ V'mBz P0% puts $a
(L%y7@"NmA6C j"VmZh0100;#这是一个命令
/`%c!kUs'K o`8[0% set a {asdfghjkl}51Testing软件测试网,T`?.^'GNXF
asdfghjkl
.YH^)AEH1H&E`2b-U:T0% puts $a51Testing软件测试网 [ I w+]T0{
asdfghjkl51Testing软件测试网'r AT:gHg
% unset a
%F!`6z#}Z'AdN9x0% puts $a #结果被改变
.d(k1H {2{%\|.a*_b0can't read "a": no such variable
E&Y8he&]0% puts 数组,tcl中的数组跟其他语言的数组不一样。数组元素名字=数组名+数组中元素的名字。51Testing软件测试网^/D5LP']\R@ pR
数组,tcl中的数组跟其他语言的数组不一样。数组元素名字=数组名+数组中元素的名字。51Testing软件测试网)|qr\7S*{
% set day(monday) 1
1n Y'?Kua6\01
R$z3I!S B\8O7a0% set day(tuesday) 2
&B8J7h4SNU"v5\3f0251Testing软件测试网+ugcK,^(G$b1j N
% puts monday51Testing软件测试网-xfj+D+B IM(k"D U/v
monday51Testing软件测试网lM'v,cXZ
% puts $monday
tsCp7{mz@$_0can't read "monday": no such variable
3IRTs\0% set a monday51Testing软件测试网q!Ddt%RK#MPW z
monday
&lFZ0}$~.N0% set day(monday) 1;set b $day(monday);puts b51Testing软件测试网 E [8o ?tp}"P
b
7L`)X b-Fum~&s d|0% set day(monday) 1;set b $day(monday);puts $b
jz!yF A^*y;e01
5@4q7m%N R'N"BR0% set c $day($a)
8{0DDw A8s9T0151Testing软件测试网QX5bc:C*f
% unset a b day(monday)51Testing软件测试网$] Pf3Ekv
% puts $day(monday)51Testing软件测试网+nC;e'q+E)E$KR#{m
can't read "day(monday)": no such element in array51Testing软件测试网fJ1h9oI*D/~
% puts $day(tuesday)51Testing软件测试网j*n"IA!f6yClT0r
2
$i0|2b_fCjA^0% unset day51Testing软件测试网)x}b!m!HJ/Tv*t
% puts $day(tuesday)51Testing软件测试网g mC,E/e,F(t
can't read "day(tuesday)": no such variable51Testing软件测试网8w:f/LS+|/iP
% puts append命令把文本加到变量的后面。
)?k3\k _S-tW/t-x0append命令把文本加到变量的后面。51Testing软件测试网JQ~p\q1[$eD;p*L*P
% set txt hello!51Testing软件测试网 Nse$h]xwR;g
hello!51Testing软件测试网 _9@I S#T7h2ot:CF5z&T0H
% append txt " wellcome to beijing!"
M#{O;r/}!`,f;]9q0hello! wellcome to beijing!51Testing软件测试网1fcs EN
% puts incr命令把一个变量值加到一个整数上。要求:变量原来的值和新加的都必须是整数。
/dS#CdT g0incr命令把一个变量值加到一个整数上。要求:变量原来的值和新加的都必须是整数。51Testing软件测试网b BTf5M;uysM+w
% set b a51Testing软件测试网j S%a/~6Z'M
a51Testing软件测试网%I^ x,@7_'m8h`2_KM/b
% incr b
.D Q7`HF7g+`h0expected integer but got "a"51Testing软件测试网'bv#f3e$hy @ Q
% set b 251Testing软件测试网Q!M2c`$[4Yd d7G
251Testing软件测试网P(\X3] m i zT\8ld
% incr b 10
"oH%d;plD{ |012
6y0\E9a#H0]{*r"x @"H(T^0% puts 接下来将学习表达式这一章51Testing软件测试网 ] S e oD7w*I
接下来将学习表达式这一章
Z6L2|+VDe0% puts 表达式的操作数通常是整数或实数。整数一般是十进制的,如果第一个字符是0,那么tcl就看成是八进制的,如果是0x则被看作是十六进制的。
@YWy-APh0表达式的操作数通常是整数或实数。整数一般是十进制的,如果第一个字符是0,那么tcl就看成是八进制的,如果是0x则被看作是十六进制的。51Testing软件测试网@"p1?+`x8oBQ
% puts 数学函数
/S5e7A:o5]8]w~0数学函数
5RQ:nr7mc0% set x 251Testing软件测试网7Vj vA*E(V:k6s0`l
2
*MJ&k5vfA9F0% expr 2*sin($x<3)51Testing软件测试网NOR$B+U+\7r[+@\
1.6829419696251Testing软件测试网$c7h%W@;aK
% expr 1+2*3-$x51Testing软件测试网k}m/G3tw
5
w~PWR,|&\0% puts 函数应用于表达式,表达式应用于各种控制流中。这就是知识的结构,从小到大。
(H*e*QDh'g8V"`0函数应用于表达式,表达式应用于各种控制流中。这就是知识的结构,从小到大。
MaT_/sr0% puts 接下来学习list这一章。51Testing软件测试网u kxze
接下来学习list这一章。
5m:O~5jj,S d9K)JQO0% puts list由一堆元素组成的有序集合,可以嵌套使用,每个元素是任意字符串。51Testing软件测试网;NS?d!_ w1K?
list由一堆元素组成的有序集合,可以嵌套使用,每个元素是任意字符串。
~ ^%[(X+L8wyWX P0% {}51Testing软件测试网HgC\9q%W"G5e8?!W
empty command name ""
"k wR.Sa|TCb0% {a b c d}
.XJ{Qh7Tz0invalid command name "a b c d"
5a-T&^#vRL0Z0A0Ku:K0% list {a b c d}
,A]LbO B"yQ_0{a b c d}51Testing软件测试网2V%A1SHa0epJ
% set lista [list a b c d]
.}|GZ|0FkEO0a b c d51Testing软件测试网_C6^ _r0y(W8[-|7g r ~
% set listb [list 1 2 {3 4}]
nB}enZ]e01 2 {3 4}51Testing软件测试网9},[l#tP1G c"A%K
% concat lista listb51Testing软件测试网Ha\`(A7p\ k
lista listb
eH#I]&o3q9C0% concat $lista $listb
@6Zt-T5m0A0a b c d 1 2 {3 4}
.pZ4c.E8x0% set listc [concat $lista $listb]51Testing软件测试网0QX*UK9{#fI
a b c d 1 2 {3 4}51Testing软件测试网 j_r y|AeY
% set one [lindex listc index]
NhE7p]~8T_0bad index "index": must be integer or end?-integer?51Testing软件测试网e7X&ab9uO7A
% set one [lindex listc 4]
%l2~ I~;W-v0% set one [lindex listc 4];puts one
k#vtV;[? \mv0one
m6y)GP ]6O!EG1T0% set one [lindex listc 4];puts $one51Testing软件测试网TL/s+v/b[

51Testing软件测试网3q!f6Vmq(A0vb8|8W

% lindex listc 3
Ud} m5M v Bu0% puts listc51Testing软件测试网+h @(Apu6p"E
listc51Testing软件测试网YD a }_7i
% puts $listc51Testing软件测试网hW1Ue @-@;L^
a b c d 1 2 {3 4}
r v^k+tux%|OFb0% puts $listc 3
:l9CE4u4f'J.F$S+f N0can not find channel named "a b c d 1 2 {3 4}"51Testing软件测试网qyf\(A,@E `
% lindex $listc 351Testing软件测试网AM6F/VH4X5c9_o$`
d
9v"M,t aQm0% llength $listc51Testing软件测试网b.tV.v$T,q#R4`
7
+t6Z@2ov:VP"u["C@0% lreplace $listc 1 3 one three51Testing软件测试网_){5Q@ b*Z!j6F4Z
a one three 1 2 {3 4}
B r6FV(j#O!Jy(Y0% lreplace $listc 1 3 one two three51Testing软件测试网*c$bj,Fh2L3P*z:P
a one two three 1 2 {3 4}51Testing软件测试网c!E,j(VG4hGe([
% puts $lista51Testing软件测试网M*y3H3o;fWnn
a b c d
x ZX_hfN"R0% lrange $lista 1 end
4G)v3x6Yhq0b c d
2L)b(t-p.iLBe^0% puts $lista51Testing软件测试网2]HAFW\fr
a b c d51Testing软件测试网:mk4S j CxFR a
% set txt Hello!;lappend $txt wellcome
M9t@J(X*R0wellcome
7V;c@2k M3V"m2aHve-B0% puts $txt51Testing软件测试网[!wQ L` f-K{+e6D
Hello!
7g/uJ(q$l*D!rW`0% lappend test 1 2 351Testing软件测试网 @k GYM}\ \e
1 2 3
%U,O1^#rd4B{4h.Z1xl0% puts test
)Ww*cpDk%X4eL-hG0test51Testing软件测试网*b)~)\H6r&el
% puts $test
c4K"wGr2~%S01 2 351Testing软件测试网f9Wc{5@%B?A_q(s
% lappend $txt 1 2 351Testing软件测试网8O_C`FEO
wellcome 1 2 3
U'ML(Ia0c,{0% set txt Hello!;lappend $txt wellcome
9M|'B3e(t4RM j*F0wellcome 1 2 3 wellcome
$~1j!t B!FP)i0% puts $txt51Testing软件测试网!CK mH"M0WAw
Hello!51Testing软件测试网+w&c+N}2J$zmY
% set newtxt [lappend $txt wellcome]
oHx[WF0wellcome 1 2 3 wellcome wellcome51Testing软件测试网D$t$f Q+m&?%d
% pust newtxt51Testing软件测试网$O*Z x4Q_@W"|/S9h
invalid command name "pust"51Testing软件测试网 a'I'GkN%t3Z2C,j"c
% puts $newtxt
b \.E"{PJ,F?0wellcome 1 2 3 wellcome wellcome
%USz$`U&ND K S0% lsearch $txt 251Testing软件测试网h"B+JX$E"w6_Q
-1
(A/\m8aT+J%bD#@0% lsearch $newtxt 2
t.qp r+G)fS02
+qD*[0s&Ts3JZ\0% lsearch -exact $newtxt 251Testing软件测试网;q X:aRn"o;J)r?'oz X
251Testing软件测试网oM.`~{cV
% lsearch -exact $newtxt well51Testing软件测试网qh+?7TW
-151Testing软件测试网,M3G.Z0aGOc
% lsearch -exact $newtxt wellcome51Testing软件测试网6c1?*e/l;oi1N#s
0
\5^ x1F0W?Bm r0% puts $listc
Neu`_0a b c d 1 2 {3 4}51Testing软件测试网vk L)M(f z#_
% lsort -asscii $listc
l buYO0bad option "-asscii": must be -ascii, -command, -decreasing, -dictionary, -increasing, -index, -integer, -real, or -unique51Testing软件测试网e$H Ifv'vk
% lsort -ascii $listc
/NVW:?"S"gTa \01 2 {3 4} a b c d51Testing软件测试网c9x*RL9{_U
% lsort -decrieasing $listc51Testing软件测试网{9W"Hh9e(~
bad option "-decrieasing": must be -ascii, -command, -decreasing, -dictionary, -increasing, -index, -integer, -real, or -unique51Testing软件测试网"H&rWVz1|
% lsort -decreasing $listc
[MS\+g#H-r9J0d c b a {3 4} 2 1
cZ-P/\$_s0% lsort -ascii $listc #ASCII排序方式
:g ^c/LAGa2?_&q0bad option "a b c d 1 2 {3 4}": must be -ascii, -command, -decreasing, -dictionary, -increasing, -index, -integer, -real, or -unique51Testing软件测试网aAy1B;f;|"h
% lsort -ascii $listc51Testing软件测试网0x%N} QQ
1 2 {3 4} a b c d
1{'\b~[:Wdg/k0% lsort -integer $listc
CPjV@Z oh3C0expected integer but got "a"51Testing软件测试网$X [8J"w w `9]'E9L
% puts lista
"`2sPI&B W0lista51Testing软件测试网np2I~L+Q
% puts $lista
1j]*`)a SOq0e7t0a b c d51Testing软件测试网1rC?}Si
% puts $txt51Testing软件测试网~@}'r:}~Qn
Hello!
%r+? Y^w2@w&A.L0% split $txt51Testing软件测试网(k8a:^g0AS'J OC
Hello!51Testing软件测试网7k}1{3SV
% split string $txt
4B!?~ V,Ji Vgb'B0string
vYl6uM@ V0z A0% split $txt {}
JY;]B1`0H e l l o !51Testing软件测试网o&[Cr xC
% split $txt l
8E Bg0i@S$C0He {} o!51Testing软件测试网#i B?+^ssX~
% split $txt e51Testing软件测试网s$v;?|DN,Wl+u
H llo!51Testing软件测试网NO&ZH:c,\P
% split "how are you" {}51Testing软件测试网-V&Vn8GOX n\
h o w { } a r e { } y o u
T3um9QY9T)D8DL0% join "how are you" {}
S'R J3\:`?z0howareyou51Testing软件测试网:r i'N,n d$qT3RmI!|
% join "how $txt {}51Testing软件测试网3A'Mx}"gL+F n
>51Testing软件测试网1A#W%ER9cj_Z5UiN
> "51Testing软件测试网.jJ.zU5lQ*t
how Hello!51Testing软件测试网 Klze6KF ? s
% join $txt {}51Testing软件测试网f X`5|~1t
Hello!51Testing软件测试网0PWk fCP}s
% split $txt {}51Testing软件测试网V&c HL7D
H e l l o !51Testing软件测试网"RKg4|"b)L0h$LC'Fx
% join $txt {}51Testing软件测试网9zsXx/E,[
Hello!51Testing软件测试网VsiV e
% jion {how are you} .
P#D]!z)BR*y0invalid command name "jion"
#e*oyf*r"K'u2N0% join {how are you} .51Testing软件测试网FiJ`TO8B]
how.are.you
AaRo!n4PV;{l*e0% puts 接下来学习第七章——过程
dj6Xm g9]0接下来学习第七章——过程
.K|6|(gO/|O6x0% set x 10;set y 20;proc add {x y } { expr $x + $y}51Testing软件测试网1w[*eX1s&O,Gu
% add 10 20
O3w7q6c'{E Z03051Testing软件测试网!MnS2XIR e#ZHt
% set x 10;set y 20;set z [proc add {x y } { expr $x + $y;}];puts z;51Testing软件测试网A\^4oKS}^#~
z51Testing软件测试网2T{5} GK*W
% set x 10;set y 20;set z [proc add {x y } { expr $x + $y;}];puts $z;51Testing软件测试网)V(T@`iX

:B*I^Q;ny C4}IN:^/M!Wq0% set x 10;set y 20;set z [proc add {x y } { expr $x + $y}];puts $z;51Testing软件测试网U%QB!Li*I:uT

1iY`7~Tr0% proc add {x y } { expr $x + $y}51Testing软件测试网 u _V{n*K`5g
% add 40 600
rzGo"aV0640

^q ^.v1k9b ly0

TAG: Tcl TCL

snowlocusfly的个人空间 引用 删除 snowlocusfly   /   2010-07-12 15:15:42
5
传递,是动作、过程、理念、延续…… 引用 删除 gdou_wzy   /   2009-09-04 18:20:28
希望大家给予补充。

    个人认为软件出现的BUG首先第一个责任一般都是测试用例的问题。其次是测试方法(本身的知识)。
最后则是态度问题。如果测试用例不完善,不论测试人员自身的水平多好,态度多好,都必然会出问题,
除非测试人员对测试用例进行了很好的完善。而如果测试用例是完好的,如果自身知识点比较贫乏也是很容易出问题的。
例如说测试用例注明测试中请注意存储数据是否正确,但是我们自身都完全不会SQL那么自然就容易出问题了。
至于态度问题其实是大家最常出错的。

    测试中常遗漏的点:

    逻辑思考方面:

    1、 对条件的分析(单元测试中常称为代码覆盖率也是同样的问题)

    例如说对if{}else{};case 1 {};case 2{};……这些条件的判断在测试用例中的体现

    2、 临界/并发问题

    3、 无效指针(野指针问题)(WEB中的无效果用户也可以作为同类问题)

    4、 新增数据/旧数据维护(从无到有是最容易遗漏的,新旧数据的权限问题也是很容易漏看的)

    5、 多次执行后的情况(一次执行和多次执行后的区别,回归测试的重要性)

    6、 存储范围(一个是程序的存储范围控制,另外是前台与后台的一致性控制,再则是在存储出错后的异常出错,
例如使用了一个内存地址来存放数据,只分配了1024B,而我选择的内容大于1024B的时候会如何?)

    7、 组合考虑(大家常常只看到了表面的紧密关联的组合考虑,而常忘记了比较深的关联)

    8、 随机问题(这是最容易被忽视的,但是也常常是引起重大问题的地方)

    软件的功能测试方面:

    1、 安装部分

    2、 配置文件

    3、 输入框的以及输入法(ctrl+c/ctrl+v)

    4、 界面布局问题

    5、 用户管理缺陷(特别是对权限有分级的情况下,我们测试常常都是使用了拥有一切权限的用户,也就是所谓的admin)

    6、 常识缺陷(常规世界中的真实情况的考虑,例如说文件名)

    如果各位大虾路过,见到有缺失的,麻烦留个脚印,让小滴我补充补充。
传递,是动作、过程、理念、延续…… 引用 删除 gdou_wzy   /   2009-03-14 18:10:12
缺乏美观
 

评分:0

我来说两句

日历

« 2024-04-20  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 27180
  • 日志数: 21
  • 建立时间: 2008-12-23
  • 更新时间: 2009-03-12

RSS订阅

Open Toolbar