軟件測試工具Winrunner中的腳本和函數調用
Winrunner與Robot不同,它的每一個腳本并不是以函數(Function)或子程序(Sub)來圈定的,就是說腳本從頭到尾都是錄制操作生成的語句,沒有頭和尾的具體劃分,對于腳本和函數的調用方式與Robot有很大不同。
Robot對腳本的調用或者使用Callscrīpt,或者使用Call,一個是不需要傳遞參數的調用,純粹是腳本調腳本,另一個則是對腳本中函數(Function)或子程序(Sub)的調用,可以傳遞參數(具體見我寫的關于Robot函數調用的文章)。那么Winrunner中腳本和函數是又怎樣調用的呢?下面我就WR8.2版本中調用的方法詳細的說明一下。
腳本的模塊化是應該始終堅持的一個方向,在WR8.2中我同樣希望建立一個main腳本和若干個子腳本。但其中我們會涉及到如下幾個不同的調用方式:
1.只是調用另一個腳本,不傳遞參數,需要一個腳本的返回值
2.調用另一個腳本,傳遞參數并需要多個腳本的返回值
3.調用另一個腳本中的函數,需要多個函數中的返回值
4.調用另一個腳本,給這個腳本傳遞參數,并根據參數判斷執行腳本中的函數,需要函數的返回值
舉一個最簡單的例子,演示不同的情況。
第一種情況:只是調用另一個腳本,不傳遞參數。
新建一個主腳本:main,里面做GUI文件加載和開啟記事本程序:
#############################################################################
GUI_close_all(); if (GUI_load(".\\notepad.gui")!=0) { report_msg("gui load error"); } else { report_msg("gui load ok"); } if (invoke_application("c:\\windows\\system32\\notepad.exe","","",SW_SHOW)!=0) { report_msg("notepad error"); } else { report_msg("notepad ok"); } re1 = call ".\\notepadinput"(); |
記住call函數的使用句式,給出相對路徑下的子腳本名稱,括號中不需要傳遞參數,re1將得到腳本notepadinput的返回值,如果不想取得返回值的話則只用call即可。
############################################################################
新建一個子腳本:notepadinput,錄制對記事本的輸入:
set_window ("無標題 - 記事本", 1); edit_set_insert_pos ("Edit", 0, 0); obj_type ("Edit","123"); obj_type ("Edit","<kReturn>"); edit_get_text("Edit",text); treturn text; |
#腳本的返回語句是treturn
可以看到上面的這個例子是最簡單的一個種調用,子腳本中都是錄制生成的語句(沒有開頭和結尾的圈定,請與Robot對比),最后一個treturn語句是腳本的返回值。
第二種情況:調用另一個腳本,傳遞參數并需要多個腳本的返回值
對腳本進行參數的傳遞和返回需要在腳本屬性中進行設置,具體操作是新建一個子腳本notepadinput在File-〉Test properties 在彈出的提示框中選擇Parameters頁簽,這里可以設置這個腳本中的傳入參數和傳出參數。我們在“input parameters”中新建兩個參數:notepadinput1,notepadinput2(最好給出描述),在“output parameters”中新建兩個參數:result1,result2。保存設置并推出,接下來開始對主腳本main和子腳本notepadinput進行編輯。
主腳本:main
###########################################################################
GUI_close_all(); if (invoke_application("c:\\windows\\system32\\notepad.exe","","",SW_SHOW)!=0) re1 = call ".\\notepadinputscrīpt"(1,2,result1,result2); #這里一定要寫上result1,result2 pause (result1); |
原文轉自:http://www.anti-gravitydesign.com