1 路徑不能寫死
從一臺機器拷貝到另一臺機器上之后, WinRunner的腳本需要能夠正常的運行。 測試腳本所依賴的所有的東東(gui maps, text files, compiled modules, dll’s)都要和測試腳本有一樣的父級目錄。
例外:
如果確實有需要的話,指向K drive中的永久文件的路徑可以寫死。(警告:當腳本在不同的機器上運行,讀取存放在K drive中的同樣的文件的時候,有可能會出現問題。)
錯誤的示范:
reload("C:\\WR_TESTS\\Aclearcase/" target="_blank" >cceptance_6\\acceptance_functions");
正確的示范:
reload(getvar("testname") & "\\..\acceptance_functions");
2 采用縮進格式增強代碼的可讀性
錯誤的示范:
for(counter = count - 24; counter < count - 1; counter++)
{
list_get_item("ListBox",counter,item);
str = str & item & "\r\n";
}
正確的示范一:
for(counter = count - 24; counter < count - 1; counter++)
{
list_get_item("ListBox",counter,item);
str = str & item & "\r\n";
}
正確的示范二:
for(counter = count - 24; counter < count - 1; counter++){
list_get_item("ListBox",counter,item);
str = str & item & "\r\n";
}
3 盡量避免將測試外部環境的依賴寫死 不要將一些隨著外部測試環境的變化而改變的信息寫死。包括有:安裝目錄、DSN名、 數據庫服務器名、數據庫用戶名、數據庫密碼。最好在測試腳本的開始就將這些東東定義為變量,這樣你就沒有必要在環境變化后,在整個腳本中作多次的修改,只要改一個地方就好了。
錯誤的示范一:
set_window(" SQL Server Login",10);
edit_set("Login ID:", "sa");
edit_type("Password:", "password");
正確的示范一:
db_username = "sa";
db_password = "password";
set_window("SQL Server Login",10);
edit_set("Login ID:", db_username);
edit_type("Password:", db_password);
錯誤的示范二:
invoke_application("C:\\iAvenue\\Windows\\UAdmin.exe","","c:\\Power_db",SW_SHOW);
正確的示范二:
install_dir = "c:\\iAvenue\\Windows";
invoke_application(install_dir & "\\UAdmin.exe","",getvar("testname") & "\\..\Power_db",SW_SHOW);
4 將文本識別作為你的最后一個選擇
文本識別將占用大量的內存,而且還不穩定,同時在不同的 操作系統可能會出現不同的結果。所以只有在沒有 其他的方法得到對象的信息的情況下才使用這種方式。不幸的是,這種情況經常發生,特別是當有對象不能被識別的時候。在下面的例子中,我們假設“Assign Date”是類:edit。
錯誤的示范:
obj_get_text("Assign Date", text);
正確的示范:
edit_get_text("Assign Date",text);
5 不要使用額外的wait語句;在需要等待的時候,盡量使用同步函數 錯誤的示范:
wait(40);
正確的示范:
statusbar_wait_info("Status Bar","value","Sites processed = 20",40);
6 不要將report_msg作為tl_step的替代
在尋找一個錯誤的原因的時候,沒有人愿意看測試腳本中的每一行語句的測試結果。如果測試結果中不是紅就是綠的話,就更加清晰明了了。所以使用tl_step標識失敗的步驟還是挺不錯的。
錯誤的示范:
if(win_exists("Active Information Manager",1) == 0)
{
set_window("Active Information Manager", 1);
obj_get_text("AfxWnd42", text);
my_gui_checkpoint(text,"AIM.log");
}
else
report_msg("AIM failure! Window absent at startup");
正確的示范:
if(win_exists("Active Information Manager",1) == 0)
{
set_window("Active Information Manager", 1);
obj_get_text("AfxWnd42", text);
my_gui_checkpoint(text,"AIM.log");
}
else
tl_step("AimReportRuns",FAIL,"AIM window absent at startup");
7 通過使用正則表達式避免將多個窗口實例放在一個gui map文件中
8 添加注釋以增強腳本的可讀性 #Please add comments
原文轉自:http://www.anti-gravitydesign.com