51Testing软件测试论坛

标题: 4Test 简明语法教程及SilkTest入门-----把压箱底的原创拿出来发 [打印本页]

作者: ryewhisky    时间: 2007-8-16 18:43
标题: 4Test 简明语法教程及SilkTest入门-----把压箱底的原创拿出来发
(把压箱底的原创拿出来发,只发到第四章)

4Test 简明语法教程及SilkTest入门
                                                                                                                                       by   ryewhisky  
                                                                                                                                       Email: czcooper@gmail.com

第一篇:基本运算和概念

4test是干什么的,能找到这篇文章的估计都了解,我就不废话了,直接入题

4test的运算符:
4test的运算符基本上都和从左到右的,比如:::,->,(),[],* / % **, + -,== !=等等。

有几个是例外的,它们的运算顺序是从右到左的,比如:
@,[type] ! ~ unary- unary+ ++ --

像++或--这种数学运算符,我们下面会讲到。

加减单目运算:(和c++像)
赋值形式为:
  X=-5                    // X被赋值为+5
  X=+5                   //X被赋值为-5

++自加和--自减方式和C++语言规则一样:

n=10
x=++n      //运行完,x为11

N=10
y=n++       //运行完,y为10,n为11

数学运算:

+ -*/%表示的意义和C++语言中一样,分别是加,减,乘,取模,取余;
**求幂这个符号在C++语言中没有,似乎C语言中也每有这个符号,这个符号来自Fotran语言的求幂操作**,在4test语法中它的含义是也是求幂。

用+-进行的集合运算:

集合C=集合A+集合B             //这表示集合C的成员为集合A和集合B的并集

集合A=集合C-集合B           //这集合A由表示属于C但不属于B的的成员构成(相对补集的概念)

举例(书上的例子)

Red-[COLORS]{Green, Blue}                       //结果为Red
Red-[COLORS]{Red,Green, Blue}           //结果为空                  


逻辑运算符:
&―――与
||――――或
!――――非

位运算符(Bitwise operators):

什么叫位运算?很简单,位(bit)就是单个的0或,和C++语言一样,有6种位运算:   
        &       与运算                      //两个位置都为1时,结果为1,其他的结果都等于0
        
          |       或运算                        //两个位置只要有一个位置为1,则结果为1。
        
         ^       异或运算                  //两个位置不相等时,结果为1,否则为0

         ~       非运算(求补)           //取反,0变成1,1变成0
   
         >>       右移运算               //算子从高位向低位移动
        <<       左移运算                //算子从低位向高位移动

If条件语句:
格式如下
If (布尔表达式)
       字句1
else
       字句2

跟简洁的表达方式是: (布尔表达式)?字句1:字句2

是不是很熟悉,哈哈,基本每个语言都是这样的。

数组结构:

格式有以下几种:

{a,b}                               //元素之间用逗号隔开,比如 LIST MyList ={“a”,“b”}

{…}                               //下面跟字母要素,一行表示一个 ,如 SET Colors ={…}
                                                                                                                                 Red
                                                                                                                                 Green
<text>                                  //这个就是后面跟的是文本, 关键字是text ,        如LIST MyList =
                                                                                                                                                   <text>
                                                                                                                                                        A
                                                                                                                                                        “b”
                                                                                                                                                                  c    //最后一项指<tab>c,前面有个空格

[ 本帖最后由 ryewhisky 于 2007-8-16 19:00 编辑 ]
作者: ryewhisky    时间: 2007-8-16 18:46
连接操作:

这个是指用+号把两个字符串或数组接起来, 前提是必须都是字符串或数组。
书上的例子:
//string concatenation
STRING sFirstName = “Bullwinkle”
STRING sLastName =  “Moose”

// “ ” writes a space
STRING sFullName = sFirstName + “ ”+ sLastName
//prints : Bullwinkle Moose
Print (sFullName)

//list concatenation
LIST lsMelon = {…}
          “watermelon”
          “ cantaloupe”
LIST lsBerry = {…}
         “strawberry”
         “raspberry”
LIST lsFruit = lsMelon +lsBerry
Print (lsFruit)

//Prints
//{watermelon, cantaloupe, strawberry, raspberry}

类型转换操作:
格式
[type-name] expr

表示把expr所表示的类型转换成[ ]里面的那种类型
例子:
testcase CastStringToInt()
     STRING sName = “SilkTest”
Print([INTEGER] sName== 81)            //强制转换成整形,这时候输入的是Silktest的首字母S的ASCII值   

Member-of 操作:
这个就是OOP中的.的用法,取的对象的属性或服务,要结合面向对象语言的特点来了解,因为4test也是门面向对象的脚本语言,比如

TextEditor.Search.Find.Pick ()

又如取当前打开的文件的名字:

FileOpen.Filename.sValue = "test.txt"

引用(Reference operator):
这个就是用字符@指引的操作,格式是@expression,用来告诉编译器去哪里去数据,@后面可以接函数,方法,控件,字窗口或具体的值等多种形式,help里只列举了一个很简单的例子:

INTEGER i = RandInt (1,32)
@("Test{i}") ()

这个语句是让编译器去Test{}中去取数据,i没有确切的值,所以有可能是Test1或 Test2,,,,
作者: ryewhisky    时间: 2007-8-16 18:46
下面是从枚举类型中引用的例子:

type COLOR is enum
  >Red
  >Green
  >Blue

window DialogBox MyDialog
   >CheckBox Red
   >CheckBox Green
   >CheckBox Blue

VOID MyFunction ()
   >COLOR eColor
   >for each eColor in ValuesOfEnum (COLOR)


MyDialog.@([STRING] eColor).SetState (TRUE)

Machine handle operator:

讲这个Machine hadle之前必需了解一下silktest中的所谓的Agent的概念,在ST的宣传稿中我们经常可以发现ST把整套工具分成两部分来讲了:

一方面是它的IDE,它ST的图形界面(GUI),可以用来开发,编辑,运行和调试4test文件。

另外一个就是Agent,它就是用来把4test脚本中的命令转换成GUI专用的命令的,可以把它理解为Agent就是IDE放出来放在AUT上面的解释测试脚本的程序,或在录制脚本时,把测试人员的动作转换成脚本回传给IDE的这么一个东西,可以把IDE看成是个Server。

IDE能够与Agent进行实时通讯,所以Agent和IDE是否在同一台PC上并不重要,测试时可以让IDE根据测试场景驱动多个Agent与它通讯。

在程序中有某句的句柄(handle),在我们这里机器也有机器的handle,就是测试环境中的机器的标签的意思(其实少的话,用计算机名足已),测试中全靠HMCACHINE值来识别机器。HMACHINE是4test的一种数据类型,以下是几个和HMACHINE相关的函数:

SetMachine()  //把特定的机器设成当前活动的机器
GetMachine()  //返回当前机器的HMACHINE值,这个值可能是通过Connect或SetMachine设置的
Connect ()    //连接某个特定的机器,并返回其HMACHINE值

看一个例子:

Example

      HMACHINE target_machine     // 定义了target_machine的类型为HMACHINE
        HMACHINE host_machine       // 定义了host computer的类型为HMACHINE
        STRING sTarget = "sunfish"  // sunfish为远程主机在网络中的计算机名
        STRING sHost = "moonray"    // moonray为本地主机在网络中的计算机名
       
       
        host_machine = GetMachine ()              //获得本地主机的HMCHINE值
       
        target_machine = Connect (sTarget)       //获得远程主机的HMCHINE值
       
        Print ("Active window on Target: ", Desktop.GetActive ())      //取得远程主机上正在运行的窗口
       
        SetMachine (host_machine)                                     //切换回本地主机,就是把本地主机设成当前机器
       
        Print ("Active window on Host: ", Desktop.GetActive ())       //取得本地主机上正在运行的窗口
        Disconnect (target_machine)                                   // 断开远程主机

现在回到我们的Machine handle operator, 它有两种表达方式:

hMachine->distrib_func         //箭号

[hMachine]distrib_func         //[]号  

其实都是让哪台机器干某哪种活的意思,如

[sMachine] TextEditor.Search.Find.Pick

["server"]doThis()



Scope resolution operator:
Shorthand assignment syntax:
作者: ryewhisky    时间: 2007-8-16 18:47
第二篇:4Test语言和C语言对比
这个章节主要要说明一下4Test和C语言的不同之处。

ANYTYPE 类型:

首先出场的就是这种NB哄哄的类型,它可以囊括所有你想要的类型,因为它就是 any type,直译就是任何类型,NB吧!!

数组的初始化:
在C语言中,数组在初始化的时候是要指出元素的个数的,这是个具体的数值而不能是个变量,并且在C语言中当数组初始化后,数组的大小就不在改变;而在4test这么NB的语言当中,数组的大小是可以随时变化的,也就是它不管你在初始化的时候定义的是多大,它都可以在运行的过程中动态地去改变它。参见两个函数:ArrayResize ()和ArraySize(), 其中的ArraySize经常用来确认数组的大小在运行时是不是被改变了。


Boolean类型:
在4Test中存在Boolean类型,其值不是TURE就是FALSE;而在标准的C中(我说的是90标准C哦)是没有布尔类型的,据说C程序员觉得用int的1和0来表示会更快一些,因此C程序员们经常再用到bool表达时,会在前面加上define或直接使用1和0:

#define TRUE 1
#define FALSE 0

字符型char:
4Test中没有char类型来表示单独的字母,但有string类型,其实差不多。

枚举类型:
C语言中枚举就是一种类型,4test中enum更接近于一种c中说的struct(结构),说不清楚了,看例子大家就知道了。

在C中:
enum COLOR {red,white,blue}

4Test中:
type COLOR is enum
       red
      white
      blue

然后COLOR就是一种类型了,所以还可以
COLOR  rcolor

Real,integer和number型:
在C中float和double到了4Test都变成了Real型了:
举例:
        8.12
        499.0
        -6.7511
        1e30
        1.45e-10
在C中int,long,short和unsigned到了4test中就变成了integer只此一种,别无分店了。

在4Test中还有一种number型,它又包含了Real和Integer型,可以表示这两种类型能表达的数字。也就是在你拿不定主意用哪种类型时,number一用保准没错。KAO,我怎么觉得4Test尽出一些流氓的万能的类型呢??


关于指针:
哈哈,4test没有C中关于指针的任何概念,我知道TX们学C的时候一定饱受了指针的折磨,一会指针数组一会数组指针,一堂课下来基本上要疯掉好几个人的。Java号称也放弃了指针,可还是有人揪出来实际java只是换了个名字而已,其实在4test中有相同的地方,4Test用了@来引用变量或函数,有点像指针的概念。

Union联合体:
4test没这种概念。
作者: ryewhisky    时间: 2007-8-16 18:49
循环语句:
在4Test中循环语句是这么写的:
for each item in expr
         statement

相当于C中的:
for i = 1 to n step 5  之类的,拷个例子大家就明白了。

testcase for eachExample ()

   LIST OF STRING lsFruit = {...}
              "apple"

                 "mango"
              "kiwi"
           STRING sFruit                          //定义了一个变量,这个变量将被赋予IsFruit中的值                 
           for each sFruit in lsFruit
              Print (sFruit)
         
             // This script prints:
        //      apple
        //      mango
        //      kiwi   

条件语句:
4test中没有while语句,但Switch语句却可以随便用
语法如下:
switch (expr)       case case-value(s)             statement       [ case case-value(s)             statement ]...       [ default             statement ]...

和C的switch语句最大的区别在于,在C中你不得不用break来结束每个statement,以便程序能跳出来,在4test中却不用这么麻烦。

例子如下:
testcase switchExample ()
           INTEGER i
           for i = 1 to 12
              switch (i)
                 case 1 // Compares i to 1
                    Print (i, "Case 1")
                 case 2, 4 // Compares i to 2 and 4
                    Print (i, "Case 2, 4")
                 case 5 to 7 // Compares i to 5, 6, and 7
                    Print (i, "Case 5 to 7")
                 case 8 to 9, 11 to 12 // Compares i to 8,9,11,12
                    Print (i, "Case 8 to 9 and 11 to 12")
                 default // If i is none of the above

            Print (i, "Default Case")
       
预处理:
4Test没有预处理机制
作者: ryewhisky    时间: 2007-8-16 18:49
第三篇:Web测试参考
从这一篇起要用很长的篇幅来讲用ST做Web测试的一些内容。

Browser window declaration:

浏览器窗口声明是一种主窗口类(MainWin类),主窗口类一般可以从桌面调用或命令行直接调用。它和对话框类(DialogBox class)的一个主要的区别是主窗口类通常会有一个菜单bar。

浏览器窗口的声明一般包含以下东西:
• Cut, Copy, Paste, and Select All items on the Edit menu
• The following tool bar buttons: Back, Forward, Home, Reload, and Stop
• The Location combo box, which lists the current URL
• The Web browser's status bar, which is an object of class StatusBar
named Status. It contains a DynamicText object named Message. So to
access the status bar, you use the object Browser.Status.Message.

包含的Method有:
ClearCache method
CloseOthers method
GetActive method
GetReadyTime method
GetRealBrowser method
Invoke method
LoadPage method
SetBrowserSize method
SetDefaultFont method
SetRequiredOptions method
StopLoading method
WaitForReady method


BrowserAuthentication window declaration:

浏览器认证窗口是个对话框类(DialogBox class),认证声明的一个主要的应用是让程序去判断是否有认证窗口弹出,如果有的话,则让输入用户名和密码,然后消失。

if (BrowserAuthentication.Exists ())
BrowserAuthentication.UserName.SetText (sUserName)
BrowserAuthentication.Password.SetText (sPassword)
BrowserAuthentication.OK.Click ()

BrowserChild class:

浏览器子窗口类来源于AnyWin类, ST中Windows被广泛的用于描述一般的GUI对象,因此,按钮,滚动条,复选框都可以被认作上windows。AnyWin没有在往上的父类了。浏览器子默认窗口类默认的标识(tag)是网页的标题头(caption)。

BrowserErrorPage window declaration:

浏览器出错窗口类,这种类通常出现在指定的URL无法访问的时候,比如说弹出一个要求输入代理服务器的窗口,像这种要求输入代理服务器的窗口就是很典型的浏览器出错窗口。

通常这类的窗口标识都有“Error”字样,为了防止除了“Error”字样的情况,我们可以在Extend的目录下把BrowserErrorPage的标识改为“Error*“,这样就能识别到所有“Error”开头的窗体。

下面的例子显示了是否有出错页窗口弹出,如果有的话则调用一个处理函数。
if (BrowserErrorPage.Exists ())
AppError ("Unable to load ’{sLocation}’ -- {BrowserErrorPage.sCaption}")

BROWSERLOCATION data type:
BROWSERLOCATION 数据类型是STRING 或WINDOWS的别名。

BrowserMessage window declaration:

浏览器信息窗口类是一种对话框类(DialogBox),以下例子显示了是否有信息窗口弹出,如果有的话则打印出错信息并调用处理函数。

if (BrowserMessage.Exists ())
BrowserMessage.PrintMessage ()
AppError ("Unable to load ’{sLocation}’")

BrowserPage window declaration:

浏览页面类就是你定义的你要测的那一个web页面。

BrowserPageNotFound window declaration:

页面未找到页类就是你指定的当程序找不到URL指定的页面时返回的那个页面。这个页面只用在通过代理服务器的情况,如果不通过代理服务访问,浏览器会自动指定一个类似的页面。

if (BrowserPageNotFound.Exists ())
AppError ("Unable to load ’{sLocation}’ -- {BrowserPageNotFound.sCaption}")

BrowserSecurityInfo window declaration:

安全信息窗口, 这个例子显示当安全信息窗口弹出后,点YES继续。

if (BrowserSecurityInfo.Exists ())
BrowserSecurityInfo.Continue.Click ()


BROWSERTYPE data type:

浏览器类型用法如下
main ()
LIST OF BROWSERTYPE lbtType
BROWSERTYPE btType
lbtType = {explorer4, netscape4}
for each btType in lbtType
GetItemCount (btType)
testcase GetItemCount (BROWSERTYPE btType)
GMO.About.Click ()
INTEGER iCount
iCount = AboutPage.UsedList.GetItemCount ()
Print (btType)
Print ("Item count: {iCount}")


Explorer window declaration:
IE特有的


GetActive method (Browser)
返回当前页面值
作者: ryewhisky    时间: 2007-8-16 18:50
第四篇:典型Web测试流程

这一篇里我们要来说明一下一个典型的Web流程是什么样的?

首先,需要在你ST上面配置一下你要测的Web Application:
Step:
1.新建一个项目Projet:
        ST提供2种测试流程:基本流程(Basic)和数据驱动流程(Data Driven)。Basic就是由无  到有建立一个测试流程,数据驱动流程就是从已有的Test Case中再拿出来跑一遍或改吧改吧当成新的case直接用了。我们选择Basic的,新建一个测试YAHOO网站的项目,项目名叫YahooTest

2.启动扩展Enabling Extensions
启动扩展文件主要是因为在测试网页应用程序时,还包括DCOM组件或ActiveX组件。
我们只需在IE上打开Yahoo主页,然后在ST上点击Enabling Extensions,此时会让你重开一次IE

3.指定Use Files
就是建一个对象定义文件testframe,后缀为inc,testframe是Scripts的基础,包含待测应用的所有对象。为GUI对象指定逻辑的,跨平台的窗口声明叫做 Identifier, Identifier 和实际的名称对应叫做 Tag. 除了Record的对象Testframe也可以包含自定义的Class,method.因为 Testframe指定是逻辑关系,所以在实际对象有所变更的时候不需要更改Scripts,只需要更改Testframe,方便代码维护.


说了这一大堆,你要做的就是在打开的YahooTest项目下,右击“Include/Frame”然后New File 选择testframe,在这个例子里我们新建的Testframe名为yahoo.inc,这个文件应该放在你的项目地下。(默认文件路径)

4. 创建测试计划TestPlan
一般来说一个Testplan应该包含下面两部分:
a.        对测试需求的概述
b.        设定测试需求和Testcase的对应关系
其他:
对AUT和测试方法的说明
对测试工作的设想和风险的说明
测试中个人责任的说明
测试准备
软件说明
TestPlan的版本信息

编写testplan的工具是Testplan Editor

我们新建一个Testplan叫yhplan.pln, 然后完善它并给developer或test engineer权限访问控制

5.录制脚本
  设置Application state点,就是用来recovery system的

recording的时候可以按Ctrl+Atl来设置Verify点

录制完Testcase后,把.t文件连接到Testplan里面去

6. Run 脚本
作者: dolphincl    时间: 2007-8-23 16:41
先感谢一下share,然后再拜读sdlkfj3
作者: northking    时间: 2007-12-12 17:27
感谢楼主   好好拜读一下
作者: xuzhaozhe    时间: 2008-1-30 11:49
感谢楼主,收藏了
作者: howwell    时间: 2008-3-5 14:30
收藏
作者: 03021217    时间: 2008-4-15 13:59
标题: 关于silktest脚本编辑

我是个silktest使用新手,想问下录制完脚本之后,编辑或者添加脚本应该把脚本放哪?还有一些变量等的声明放在哪个地方?希望能回答详细一点
先谢谢了
作者: jimmy_zjw    时间: 2008-4-17 16:28

作者: tianxiang    时间: 2008-7-3 15:26
顶起来,方便大家查看
作者: janeainer    时间: 2008-7-18 12:13
对我很实用
作者: tracy-fmsi    时间: 2008-10-30 17:26
谢谢楼主
作者: jhx800    时间: 2009-4-10 00:25
3,4 有用
作者: xhhuang1618    时间: 2009-9-23 23:29
很老的贴子,但对我帮助很大,谢谢
作者: june.diny    时间: 2010-5-13 11:12
标题: 回复 5# 的帖子
纠正,不知道LZ用的是什么版本,我用2006 R2中有while语句哦
[-] testcase whileExample ()
        [ ]    INTEGER i = 5
        [-]    while (i > 0)
                [ ] print(i)
                [ ] i=i-1
        [ ] //    This script prints:
        [ ] //      5
        [ ] //      4
        [ ] //      3
        [ ] //      2
        [ ] //      1
作者: tlu_jj    时间: 2011-4-11 16:56
感谢,内容少了点。不过很有用。谢谢分享
作者: 韦五妲    时间: 2011-8-4 15:05
正装为什么不好看 教你最准确搭配方法
  有一些公关人士穿的西装,它有可能是有品牌的,也很昂贵,但是为什么穿上就不好看呢?这就涉及到有关成规的问题。我们在谈到着装礼仪,说到遵守常规时总要强调的一句话:有所为,有所不为。那么去看一个男士,他穿西装,他会穿还是不会穿,主要应当考虑什么问题?是穿着舒服重要呢?还是搭配合适重要呢?有一些穿法技巧上的问题要注意,我觉得主要是搭配得合适。比较专业的讲法,讲到一个男士穿西装的问题时强调所谓的“三个三”。什么叫“三个三”呢?穿西装时有三大问题要注意,而每个问题里都有一个三字,所以叫“三个三”。
    第一个“三”,三色原则。它规定:穿西装正装时,全身上下的颜色不能多于三种。我有个职业病,我在大庭广众之下见到一个男士,或被介绍与另外一位男士认识时,我一般不听他自报家门,我也不过分迷信他名片上的头衔。
我一般喜欢把他身上的颜色数一数,我的经验是:其人身上的服装,三种颜色一般是正规军,四种颜色一般是游击队,五种颜色一般比较傻外行了。身上颜色多于五种的一般不喜欢理他,因为他差劲死了,当然这是开玩笑的话。这是第一个“三”。当然休闲装没有这个问题,穿休闲西装逛大街、轧马路、吃饭、去玩都无所谓,没必要打领带的。
    第二个“三”,三一定律。什么叫三一定律呢?三一定律是告诉我们,男士在重要场合穿套装出来的时候,身上有三个要件应该是同一个颜色。哪三个要件?鞋子、腰带、公文包。它们应该是一个颜色,并且应该首先黑色。内行看门道,外行看热闹。懂行的男人都知道,看男人西装有时候看不出名堂来。我有时发牢骚说男人很可怜,漂亮衣服没得穿。不像女性穿的时装,可以经常换。我们有什么换的呢?除了西装还是西装,一个扣,两个扣,三个扣,没扣,没多少差别。不穿西装穿牛仔,不穿牛仔穿夹克,再就没了。你上班的时候穿的则往往是制服,制服都是一样的,顶多是号的大小不同。内行看门道,讲究的男人花钱的地方是什么呢?鞋子、
腰带、公文包、手表之类。这是男人身上的要件,饰品,也是重要的搭配。一名讲究的男人在重要场合抛头露面时,他的鞋子、腰带、公文包应该是一个颜色,而且首选是黑色。这样就比较好看。如果我现在戴的是金属表带的手表,那么金属表带的颜色,应该和我眼镜镜框的颜色一样,和我皮带扣的颜色一样,这才叫协调。换而言之,如果我现在戴的是一块真皮表带的手表,它的表带颜色应该也是黑的,和鞋子、腰带、公文包的一样,浑然一体、一气呵成,比较好看。
第三个“三”,
    除了这“三个三”之外,我们需要注意什么呢?具体来讲,选择西装、搭配西装,有一系列的问题要注意。
    择西装时,首先要注意面料、色彩。我们在选择西装的时候,在力所能及的范围之内要选择毛料,纯正的、质地良好的面料,因为它悬垂、透气、轻、薄、软,是高档西装的标志。从面料上来讲,一般要选纯毛面料。当然有时候要考虑到季节性差异,夏天很热,就要选那种混纺的,含毛比例高的面料。
    此外,选择西装一定要注意色彩,一定要注意,休闲装和正装西装是有其色彩方面的区别的。如果是休闲西装,那么可以个性化。正装西装不讨论个性,讲究的是深色的、单色的。在一般情况下,蓝色、灰色的西装,应为男士所常备。


此信息来自:北京西装厂 西装订做
作者: z447946546    时间: 2012-8-24 15:00
先顶 再看 哈哈@谢谢楼主分享




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2