51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 20378|回复: 21
打印 上一主题 下一主题

4Test 简明语法教程及SilkTest入门-----把压箱底的原创拿出来发

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-8-16 18:43:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(把压箱底的原创拿出来发,只发到第四章)

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 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2007-8-16 18:46:23 | 只看该作者
连接操作:

这个是指用+号把两个字符串或数组接起来, 前提是必须都是字符串或数组。
书上的例子:
//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,,,,
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-8-16 18:46:44 | 只看该作者
下面是从枚举类型中引用的例子:

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:
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-8-16 18:47:46 | 只看该作者
第二篇: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没这种概念。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-8-16 18:49:02 | 只看该作者
循环语句:
在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没有预处理机制
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-8-16 18:49:20 | 只看该作者
第三篇: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)
返回当前页面值
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2007-8-16 18:50:10 | 只看该作者
第四篇:典型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 脚本
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-8-23 16:41:45 | 只看该作者
先感谢一下share,然后再拜读sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-12-12 17:27:51 | 只看该作者
感谢楼主   好好拜读一下
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-1-30 11:49:27 | 只看该作者
感谢楼主,收藏了
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-3-5 14:30:40 | 只看该作者
收藏
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2008-4-15 13:59:54 | 只看该作者

关于silktest脚本编辑


我是个silktest使用新手,想问下录制完脚本之后,编辑或者添加脚本应该把脚本放哪?还有一些变量等的声明放在哪个地方?希望能回答详细一点
先谢谢了
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2008-4-17 16:28:22 | 只看该作者
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2008-7-3 15:26:28 | 只看该作者
顶起来,方便大家查看
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2008-7-18 12:13:38 | 只看该作者
对我很实用
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2008-10-30 17:26:02 | 只看该作者
谢谢楼主
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2009-4-10 00:25:09 | 只看该作者
3,4 有用
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2009-9-23 23:29:47 | 只看该作者
很老的贴子,但对我帮助很大,谢谢
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-3-3 10:21
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    19#
    发表于 2010-5-13 11:12:08 | 只看该作者

    回复 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
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2011-4-11 16:56:13 | 只看该作者
    感谢,内容少了点。不过很有用。谢谢分享
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-5-4 02:30 , Processed in 0.083556 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表