利用LUA编写功能测试脚本培训教材

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

利用LUA编写测试脚本培训教材***2011-6-29目的•为了让测试人员熟悉LUA编程代码,更快的掌握编写测试脚本,提高测试效率,为自动化测试做好前期准备工作。一、简介•Lua的语法比较简单,学习起来也比较省力,但功能比较强大。这也是我们这选择这个开发语言做为我们脚本编程语言的重要原因。其特点有:•①可扩展性。Lua的扩展性非常卓越,以至于很多人把Lua用作搭建领域语言的工具(注:比如游戏脚本)。Lua被设计为易于扩展的,可以通过Lua代码或者C代码扩展,Lua的很多功能都是通过外部库来扩展的。Lua很容易与C/C++、java、fortran、Smalltalk、Ada,以及其他语言接口。二、特点•②简单。Lua本身简单,小巧;内容少但功能强大,这使得Lua易于学习,很容易实现一些小的应用。他的完全发布版(代码、手册以及某些平台的二进制文件)仅用一张软盘就可以装得下。•③高效率。Lua有很高的执行效率,统计表明Lua是目前平均效率最高的脚本语言。•④与平台无关。Lua几乎可以运行在所有我们听说过的系统上,如NextStep、OS/2、PlayStationII(Sony)、MacOS-9、OSX、BeOS、MS-DOS、IBMmainframes、EPOC、PalmOS、MCF5206eLITEEvaluationBoard、RISCOS,及所有的Windows和Unix。Lua不是通过使用条件编译实现平台无关,而是完全使用ANSI(ISO)C,这意味着只要你有ANSIC编译器你就可以编译并使用Lua。三、注释•写一个程序,总是少不了注释的。在Lua中,你可以使用单行注释和多行注释。单行注释中,连续两个减号--表示注释的开始,一直延续到行末为止。相当于C++语言中的//。多行注释中,由--[[表示注释开始,并且一直延续到]]为止。这种注释相当于C语言中的/*...*/。在注释当中,[[和]]是可以嵌套的四、Lua编程•在Lua中,语句之间可以用分号;隔开,也可以用空白隔开。一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。几种程序控制语句控制语句格式示例Ifif条件then...elseif条件then...else...endif1+1=2thenprint(true)elseif1+2~=3thenprint(true)elseprint(false)endWhilewhile条件do...endwhile1+1~=2doprint(true)endRepeatrepeat...until条件repeatprint(Hello)until1+1~=2Forfor变量=初值,终点值,步进do...endfori=1,10,2doprint(i)endForfor变量1,变量2,...变量nin表或枚举函数do...endfora,binmylistdoprint(a,b)end•注意一下,for的循环变量总是只作用于for的局部变量;当省略步进值时,for循环会使用1作为步进值。使用break可以用来中止一个循环。、•相对C语言来说,Lua有几个地方是明显不同的,所以面要特别注意一下:.语句块语句块在C中是用{和}括起来的,在Lua中,它是用do和end括起来的。比如:doprint(Hello)end可以在函数中和语句块中定局部变量。语句块赋值语句•赋值语句赋值语句在Lua被强化了。它可以同时给多个变量赋值。例如:a,b,c,d=1,2,3,4甚至是:a,b=b,a--多么方便的交换变量功能啊。在默认情况下,变量总是认为是全局的。假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。比如:locala,b,c=1,2,3--a,b,c都是局部变量数值运算•数值运算和C语言一样,支持+,-,*,/。但Lua还多了一个^。这表示指数乘方运算。比如2^3结果为8,2^4结果为16。连接两个字符串,可以用..运处符。如:Thisa..string.--等于thisastring比较运算•所有这些操作符总是返回true或false。对于Table,Function和Userdata类型的数据,只有==和~=可以用。相等表示两个变量引用的是同一个数据。比较符号====~=含义小于大于小于或等于大于或等于相等不相等•例子:•a={1,2}b=aprint(a==b,a~=b)--输出true,falsea={1,2}b={1,2}print(a==b,a~=b)--输出false,true逻辑运算•逻辑运算and,or,not其中,and和or与C语言区别特别大。在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!and和or的运算结果不是true和false,而是和它的两个操作数相关。aandb:如果a为false,则返回a;否则返回baorb:如果a为true,则返回a;否则返回b逻辑运算-例子•举几个例子:•print(1a5and3B9)--输出1B9print(niland13)--输出nilprint(falseand13)--输出falseprint(4or5)--输出4print(falseor5)--输出5运算符优先级•运算符优先级,从低到高顺序如下:•orand==~===..(字符串连接)+-*/%not#(lua5.1取长度运算)-(一元运算)^•和C语言一样,括号可以改变优先级。关键字•关键字是不能做为变量的。Lua的关键字不多,就以下几个andbreakdoelseelseifendfalseforfunctionifinlocalnilnotorrepeatreturnthentrueuntilwhile变量类型1•怎么确定一个变量是什么类型的呢?大家可以用type()函数来检查。Lua支持的类型有以下几种:类型定义Nil空值,所有没有使用过的变量,都是nil。nil既是值,又是类型。Boolean布尔值,只有两个有效值:true和falseNumber数值,在Lua里,数值相当于C语言的double变量类型2类型定义String字符串,如果你愿意的话,字符串是可以包含\0字符的(这和C语言总是以\0结尾是不一样的)Table关系表类型,这个类型功能比较强大,请参考后面的内容。Function函数类型,不要怀疑,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。Userdata嗯,这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针。变量的定义•所有的语言,都要用到变量。在Lua中,不管在什么地方使用变量,都不需要声明,并且所有的这些变量总是全局变量,除非我们在前面加上local。这一点要特别注意,因为我们可能想在函数里使用局部变量,却忘了用local来说明。至于变量名字,它是大小写相关的。也就是说,A和a是两个不同的变量。定义一个变量的方法就是赋值。=操作就是用来赋值的我们一起来定义几种常用类型的变量吧。A.Nil正如前面所说的,没有使用过的变量的值,都是Nil。有时候我们也需要将一个变量清除,这时候,我们可以直接给变量赋以nil值。如:•var1=nil--请注意nil一定要小写Boolean•布尔值通常是用在进行条件判断的时候。布尔值有两种:true和false。在Lua中,只有false和nil才被计算为false,而所有任何其它类型的值,都是true。比如0,空串等等,都是true。不要被C语言的习惯所误导,0在Lua中的的确确是true。你也可以直接给一个变量赋以Boolean类型的值,如:•Boolean=trueNumber•在Lua中,是没有整数类型的,也不需要。一般情况下,只要数值不是很大(比如不超过100,000,000,000,000),是不会产生舍入误差的。在WindowsXP能跑的当今主流PC上,实数的运算并不比整数慢。实数的表示方法,同C语言类似,如:40.44.57e-30.3e125e+20String•字符串,总是一种非常常用的高级类型。在Lua中,我们可以非常方便的定义很长很长的字符串。字符串在Lua中有几种方法来表示,最通用的方法,是用双引号或单引号来括起一个字符串的,如:That'sgo!或'Helloworld!'转义字符•和C语言相同的,它支持一些转义字符,列表如下:\abell\bbackspace\fformfeed\nnewline\rcarriagereturn\thorizontaltab\vverticaltab\\backslash\doublequote\singlequote\[leftsquarebracket\]rightsquarebracket由于这种字符串只能写在一行中,因此,不可避免的要用到转义字符。表的构造•关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是C语言的数组,只能用正整数来作索引;在Lua中,你可以用任意类型来作数组的索引,除了nil。同样,在C语言中,数组的内容只允许一种类型;在Lua中,你也可以用任意类型的值来作数组的内容,除了nil。表的构造•Table的定义很简单,它的主要特征是用{和}来括起一系列数据元素的。比如:•T1={}--定义一个空表T1[1]=10--然后我们就可以象C语言一样来使用它了。••T1[John]={Age=27,Gender=Male}这一句相当于:T1[John]={}--必须先定义成一个表,还记得未定义的变量是nil类型吗T1[John][Age]=27T1[John][Gender]=Male当表的索引是字符串的时候,我们可以简写成:T1.John={}T1.John.Age=27T1.John.Gender=Male或T1.John{Age=27,Gender=Male}表的构造•在定义表的时候,我们可以把所有的数据内容一起写在{和}之间,这样子是非常方便,而且很好看。比如,前面的T1的定义,我们可以这么写:•T1={10,--相当于[1]=10[100]=40,John=--如果你原意,你还可以写成:[John]={Age=27,--如果你原意,你还可以写成:[Age]=27Gender=Male--如果你原意,你还可以写成:[Gender]=Male},20--相当于[2]=20}注意要点•注意三点:第一,所有元素之间,总是用逗号,隔开;第二,所有索引值都需要用[和]括起来;如果是字符串,还可以去掉引号和中括号;第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;五、基本语法•Lua像C和PASCAL几乎支持所有的传统语句:赋值语句、控制结构语句、函数调用等,同时也支持非传统的多变量赋值、局部变量声明赋值语句•1、赋值是改变一个变量的值和改变表域的最基本的方法。例:•t.n=t.n+1•a=hello“•2、Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。•a,b=10,2*x--a=10;b=2*x赋值语句•3、遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值:•x,y,b,c=y,x,3,nil--swap'x'for'y'•a[i],a[j]=a[j],a[i]--swap'a[i]'for'a[i]'•4、当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:•a.变量个数值的个数按变量个数补足nil•b.变量个数值的个数多余的值会被忽略局部变量与代码块(block)•使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。•x=10•loc

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功