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&" ";
  }
  正确的示范一:
  for(counter=count-24;counter<count-1;counter++)
  {
  list_get_item("ListBox",counter,item);
  str=str&item&" ";
  }
  正确的示范二:
  for(counter=count-24;counter<count-1;counter++){
  list_get_item("ListBox",counter,item);
  str=str&item&" ";
  }
  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