• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    robot函數實例講解(一)

    發布: 2007-4-29 00:23 | 作者: s | 來源: 51testing論壇 | 查看: 150次 | 進入軟件測試論壇討論

    領測軟件測試網

    功能說明:出現一個提示對話框,N秒后消失,比如說:提示等待一個窗口阿,有時候這個窗口沒了,我也不知道腳本運行到什么地方了,提示一下挺好,也方便javascript:;" onClick="javascript:tagshow(event, '%C6%E4%CB%FB');" target="_self">其他測試員修改,而且,也不影響無人值守的操作

    例子:SQAMsgbox "test","title",5

    Global iTime as Integer

    Declare Function TimedDlgFunc(id As String, Action As Integer, Suppvalue As Long) As Integer

    Declare Function SQAMsgBox(sMsgText as String, Optional vMsgCaption as Variant, Optional vTimeOut as Variant) as Integer


    Function TimedDlgFunc(id As String, Action As Integer, Suppvalue As Long) As Integer
        Static StartTime
        Dim EndTime
        Dim vTimeoutvalue as Variant

        Select Case Action
            Case 1      'Dialog box Initialization
                    StartTime = Timer

                    If StartTime + iTime >= 86400 Then
                            StartTime = 86400 - StartTime - iTime
                    End If
                    TimedDlgFunc = 1

            Case 2      'Button pushed or any control changed (except typing in text or combo box)
                Select Case Suppvalue
                    Case 1
                        DlgEnd -1
                    Case 2
                        DlgEnd 0
                    Case Else
                        TimedDlgFunc = 0
                End Select

            Case 3      'Change in text or combo box contents
                    TimedDlgFunc = 1

            Case 4      'Change of control focus
                    TimedDlgFunc = 1

            Case 5      'Idle state (return 0 to prevent this being continually called)
                    EndTime = Timer
                    If (EndTime - StartTime) >= iTime Then
                            DlgEnd -1
                    End If
                    vTimeoutvalue = Format(iTime - (EndTime - StartTime), "#.#")
                    DlgText DlgControlID("txtTimevalue"), CStr(vTimeoutvalue)
                    TimedDlgFunc = 1
        End Select

    End Function


    Function SQAMsgBox(sMsgText as String, Optional vMsgCaption as Variant, Optional vTimeOut as Variant) as Integer
        Dim Result as Integer
        Dim TotalTime As Integer
        Dim sCmdText as String   
        Dim sTimeoutText as String
        Dim vvalue as Variant

       
        If IsMissing(vMsgCaption) Then
            vMsgCaption = "SQAMsgBox"
        End If
        If IsMissing(vTimeOut) Then
            vTimeOut = 20       'seconds
        End If

        sTimeoutText = "Timeout: "
       
    '-----
        Begin Dialog dlgMsgBox 200, 80, vMsgCaption, .TimedDlgFunc
            GroupBox 5, 2, 190, 40, "", .grpMsgTxt
            Text 15, 11, 175, 25, sMsgText, .txtMsgText
            Text 15, 47, 180, 20, sCmdText, .txtCmdText
    '--------------
            Button 20, 60, 40, 14, "&OK", .btnOK
            Button 140, 60, 40, 14, "&Cancel", .btnCancel
            Text 78, 63, 30, 10, sTimeoutText, .txtTimeText
            Text 108, 63, 20, 10, vTimeout, .txtTimevalue
        End Dialog
    '-----

        Dim TimedDlg As dlgMsgBox
        iTime = CInt(vTimeOut)
        Result = Dialog(TimedDlg)
       
        If Result = 2 Then
            SQAMsgBox = sqaFail
        Else
            SQAMsgBox = sqaPass
        End If   
       
    End Function

    關于Recognition
    一共分為Recognition, ParentRecognition, FullRecognition
    1. To find the recognition method of the currently active window:
    Result=SQAGetProperty(".\","Recognition",value)
    Returned value:
    Type=Window;Name=frmMain
    抓出來的是當前窗口的一些信息

    2. To find the immediate parent of the tree view item Bach:
    Result=SQAGetProperty("Name=treMain;\;ItemText=Bach","ParentRecognition",value)
    Returned value:
    Type=TreeView;Name=treMain
    抓出來的是樹型結構的父結點的信息

    3. To find the complete object path of the tree view item Bach, beginning with the desktop and ending with the target object itself:
    Result=SQAGetProperty("Name=treMain;\;ItemText=Bach","FullRecognition",value)
    Returned value:
    Type=Window;Name=frmMain;\;Type=TreeView;Name=treMain;\;Type=TVItem;ItemText=Bach
    抓出來的是樹型結構中指向該控件的全部路徑

    Rational Robot中自動進行100次操作
    Rational Robot中的SQA Basic與Basic語言極為類似,下面是一個for循環的例子,其中cstri()函數把整數轉換成字符串。
    Sub Main
        Dim Result As Integer
        Dim i As Integer
        ……
      
         'begin of for loop
         for i=1 to 100 step 1
         ……
         InputKeys cstr(i*3) '這個地方設置輸入值為I*3.
         ……
        next
        'end of for loop
        ……
    End Sub

    使用Rational Robot錄制自動測試GUI腳本,在點擊一個按鈕以后,出現的結果可能有多種,可能會出現一個含“確定”按鈕的對話框,也可能出現一個標題為”Title abcd”的窗體,可以使用SQAWaitForPropertyvalue方法來判斷出現的屬性,或者使用SQAWaitForObject來判斷出現何種窗體,下面是兩個對可能出現的屬性進行判斷的例子。

    1).2秒內假若出現確定對話框,點擊確定按鈕,否則打印"確定按鈕未出現" :
    '等待2秒直到確定按鈕出現.
    Result = SQAWaitForPropertyvalue("Text=(O)確定", "Enabled",TRUE, 2000)
    If Result <> sqaSuccess Then
    print "確定按鈕未出現"
    Else  
        PushButton Click, "Text=(O)確定"   
    End If

    2).2秒內假若出現標題為"Title abcd" 的窗體,打印"出現標題為Title abcd的窗體" ,否則打印"未出現標題為Title abcd的窗體" :
    '等待2秒直到標題為Title abcd的窗體出現.
    Result = SQAWaitForPropertyvalue("Caption=Title abcd", "Enabled",TRUE, 2000)
    If Result <> sqaSuccess Then
    PushButton Click, "Text=(O)確定"
    print "出現標題為Title abcd的窗體"
    Else  
        print "未出現標題為Title abcd的窗體"
    End If


    說明:
    1).Result是一個Integer型變量;

    2).SQAWaitForPropertyvalue:顧名思義,指的是等待一個屬性被指定值之前暫停執行。SQAWaitForPropertyvalue("Text=(O)確定", "Enabled",TRUE, 2000)表示等待2秒直到確定按鈕出現,如果2秒內未出現,則返回sqlfalse,出現則返回sqlsuccess;

    3).SQA Basic中<>表示不等于;

    4).另外,可以用SQAWaitForObject來判斷出現出現的對象類型:
    Result = SQAWaitForObject("Type=PushButton;Text=OK", 2000)
    If Result = sqaSuccess Then
         ...          ' add the rest of the actions/tests here
    End If

    識別控件
    需要相應的enabler,你現在測試的程序是delphi開發的應用軟件,那么就要加載相應的delphi enabler!

    extension manager里邊加入了delphi enabler,但是這個還是不能識別出delphi開發中用到的第三方控件或則其他控件!其實這里選擇只是個打開使用真正的delphi enabler的開關,真正的delphi其實是一個sqasrvr.pas的單元文件,這個單元文件是識別控件的核心。

    ratitonal 2003里邊的test enabler安裝選項中包含delphi enabler,但是它需要你本機上安裝delphi,才會把delphi enabler安裝到你的機器上。否則不會出現。

    假如安裝成功后,會在開始菜單中rational菜單下,rational test菜單下出現個delphi enabler(具體什么名字忘記了)的菜單項,通過它可以調用一個執行文件。
    執行文件的功能就是把sqasrvr.pas自動放到工程文件的頭。

    delphi 工程文件只有加載了這個delphi enabler(核心 sqasrvr.pas)才會讓robot識別,當然前提是你的extension manager中delphi選擇了。

    Robot手工編寫GUI腳本如何獲取對象識別方法和屬性

    以計算器為例,下面的腳本是鍵盤輸入“1+1=”,然后關閉計算器。
    Sub Main
        Dim Result As Integer

        StartApplication "C:\WINNT\system32\calc.exe"
       
        Window SetContext, "Caption=計算器", ""
        InputKeys "1{+}1{ENTER}"
        Window CloseWin, "", ""

    End Sub
       
        Robot提供了獲取對象識別方法和屬性的利器――Inspector。通過Robot tools-Inspector..打開,F在使用SQAGetProperty命令獲取1+1的結果值,并通過msgbox顯示該值。
        鼠標左鍵按住Inspectot工具欄上的“Select Objcet”按鈕,然后選擇計算器的結果放開鼠標左鍵。Inspectot中顯示出對象的識別方法,鼠標左鍵點擊工具欄上的“Copy recognition String”按鈕拷貝識別方法,屬性值通過選擇Inspector左下角窗口中的Text屬性,然后鼠標左鍵點擊工具欄上的“Copy”按鈕拷貝屬性。修改后的腳本如下:
    Sub Main
        Dim Result As Integer
        Dim sum as Variant

        StartApplication "C:\WINNT\system32\calc.exe"
       
        Window SetContext, "Caption=計算器", ""
        InputKeys "1{+}1{ENTER}"
       
        Result = SQAGetProperty ("Type=Label;ObjectIndex=1", "Text", sum)
        msgbox sum
       
        Window CloseWin, "", ""

    End Sub

        VU腳本是類C語言,區分大小寫。所以在獲取識別方法和屬性值時最好的方法就是使用Inspector。
        自己編寫腳本時,還有一個要注意的問題是窗口上下文,窗口上下文不正確會導致回放時找不到對象。上面的腳本中Window SetContext, "Caption=計算器", ""下面的操作都是在這個窗口上進行的。編寫腳本時一定注意看一下窗口上下文是否正確。
        也可以在識別方法中指定窗口上下文,如Result = SQAGetProperty ("Type=Label;ObjectIndex=1", "Text", sum)可以改成Result = SQAGetProperty ("\;Type=Window;Caption=計算器;\;Type=Label;ObjectIndex=1", "Text", sum),第一個“\”代表桌面,“Type=Window;Caption=計算器”是計算器窗口,第二個“\”代表“Type=Window;Caption=計算器”和“Type=Label;ObjectIndex=1”是父子關系。這兩個命令的效果完全一樣。

    SQABasic頭文件包含一系列的聲明,頭文件可以應用到

    一.聲明共有或則全局常量,變量和用戶定義類型

    二.聲明自定義sub,procedures和function

    頭文件中的聲明可以應用到任何模塊(腳本或者類庫文件)。用’$include關鍵字,放在模塊開始的地方-例如:

         ’$include “global.sbh”

    SQABasic頭文件類型

    Sqabasic支持兩種頭文件類型:

    一.頭文件保存在sqabasic路徑。不用指定任何路徑信息就可以在本工程或者其他工程中應用他們

    二.工程頭文件可以保存在TMS_Script文件夾中。不用指定任何路徑信息就可以在同一個工程中處理。

    這兩種SQABasic頭文件都有同樣的擴展名- .sbh

    庫文件


    庫文件包含一個或者更多供procedure從其它文件調用的sub,procedure和function。

    一.SQABasic庫文件(擴展名為.sbl或則.rec)

    注意,.rec文件可以作為腳本文件或者庫文件,但是.sbl只能被用作庫文件。

    二.動態連接庫文件(擴展名.dll)

    下邊的表格這幾種類庫文件不同的總結:


    .sbl
    .rec
    .dll

    位置
    SQABasic路徑
    當前工程文件中Datastore(文件夾 TMS_Script)
    TMS_Script/dll文家夾或則其他位置

    范圍
    在SQABasic路徑中,對所有工程文件都可用
    對同一個工程所有腳本可用
    依靠位置

    驗證點
    不支持
    支持標準的robot驗證點
    支持自定義驗證點


    任何.rec文件都能作為庫文件。不管怎樣,如果一個.rec文件作為腳本(可以從robot中直接運行或者用callscript命令),他必須有一個main過程。

    在SQABasic庫文件中聲明過程


    如果在SQABasic過程中有一個自定義的過程,你聲明類文件的方法同樣適用聲明過程。

    下邊的例子是在sqabasic庫文件中(mylib.sbl)聲明一個自定義過程(mysub):

         Declare Sub MySub Basiclib “MyLib”( arg1 as string,arg2 as integer)

    一.關鍵字basiclib,表示過程mysub在一個sqabasic庫文件中

    二.庫文件的名字“mylib”,這里不需要寫擴展名(.sbl或者.rec)

    備注:basiclib關鍵字特指.sbx庫文件的聲明(和.dll庫文件相對),這里不需要也不推薦帶有.sbx擴展名的聲明。


    什么地方聲明SQABasic庫文件

    可以在任何位置聲明SQABasic庫文件

    一.在腳本或者其他庫文件,僅在模塊中應用過程

    二.頭文件中,用道的模塊

    庫文件包含不需要指定的例程或者’include頭文件

    在dll文件聲明過程文件


    如果在dll文件的自定義過程,聲明過程同樣可以聲明dll文件。

    下邊是dll文件中(mydll.dll)聲明自定義過程(mysub)的例子:

           declare sub mysub lib “mydll”(byval arg1 as string,Byval arg2 as integer)

    一.聲明中加入Lib關鍵字,表示聲明的過程在dll文件中(相對于.sbl或者.rec sqabasic庫文件)

    二.庫文件名字(mydll),跟隨庫指定的名稱

    三.參數聲明通常包括關鍵字byval(參數聲明包括任何關鍵字)


    如果編譯位置在sqabas32路徑或在系統路徑的庫文件(.dll),你不用特別聲明路徑。如果庫文件不再sqabas32或者在系統路徑,你需要制定路徑,比如

           Declare Sub MySub Lib “E:MyDll”  (byval arg1 as string,Byval arg2 as integer)

    在什么地方聲明dll文件


    你可以聲在任何為指聲明dll文件:

    1.腳本或者sqabasic庫文件,要用過程的模塊

    2.頭文件,任何模塊指定的頭文件

    SQABasic路徑


    Sqabasic路徑是robot保存和尋找sbl庫文件和頭文件的地方,用戶在robot中也可以定義。

    一旦你在robot中指定sqabasic路徑,這個路徑是固定的。不管怎樣,robot自動設置sqabasic路徑,當下列條件是真的時候:

               i.仍沒有明確在robot中定義sqabasic

             ii.已經在rational Aministrator建立新的工程和數據倉庫

            iii.打開最近創建的工程和數據倉庫

    當上邊所有條件為真的時候,robot自動在新工程和數據倉庫中設置sqabasic路徑到下列位置:

    [NewProject][NewDatastore]DefaultTestScriptDatastoreTMS_ScriptSQABas32

    設置步驟:

    1)點Tools->General Options

    2)點Preferences頁面

    3)在SQABasic路徑中輸入路徑

    Rational test早期版本沒有提供菜單選項來設置sqabasic路徑 – 參閱sqa common directory片斷

    指導使用頭文件和庫文件


    推薦下邊使用庫文件方法:

    a)自定義函數或者過程應該使用有同樣文件名字的頭文件(.sbh)和庫文件(.sbl),比如DataFunctions.sbh和DataFunctions.sbl。這個過程和函數在頭文件中定義(指定聲明頭文件)和在庫文件中定義?聪逻叺睦

    b)分離頭文件(參閱常量頭文件)用于包含常量,變量和用戶定義類型用于腳本或者庫文件調用。頭文件用同樣的文件名字后邊附加_x或則_C(附加是早期命名規定)。注意包含常量和變量的頭文件必須加入到聲明頭文件和庫文件之前。(DataFunctions.sbh和DataFunctions.sbl),比如’include “DateFunctions_c.sbh”。這樣做很容易維護。

    c)通過分類或者程序把相關的函數放在同一個庫里,例如,把所有日期相關的函數放到DataFunctions.sbh/sbl,或者把所有的函數加入為特定程序開發的函數庫中(比如AppName.SBH/SBL)


    d)函數是在庫文件中子程序的的首選方式,處分過程的結果對于調用腳本是不相關的。函數應該返回一個值,或者適當的,數據可以通過變量或者數組返回。在后邊的例子中,函數返回的結果表示成果或者失敗。


    e)庫文件中的所有得函數和子程序必須有“注釋“,包含這個過程的目的和用途::

    請看下邊的例子。


    f)庫文件的注釋有合理的解釋,通過讀注釋可以知道過程的邏輯


    g)如果開發和維護robot庫文件是集中管理的方式,那么你可以加入到’$include 所有庫文件到global.sbh頭文件中,這樣做對所有頭文件都有用。這可以加入缺省的腳本模板。作為選擇,測試人員在每個腳本中可以選擇或者包含需要的庫文件。

    轉載請注明信息來源51testing


    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    軟件測試技術文章排行榜
    軟件測試技術分類最新內容
    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>