通过值守线程处理自动化测试的Runtime error错误提示框
上一篇 /
下一篇 2012-06-16 10:29:04 / 天气: 晴朗
/ 心情: 高兴
/ 个人分类:RFT
51Testing软件测试网 Ih(G'E [l0[ 自动化测试开发过程中,脚本的健壮性是一个永远的话题,健壮性差的脚本会导致运行失败,影响我们最终的自动化测试效果。笔者在做自动化测试过程中,曾深受各种异常的困扰,在这里先分享一个Runtime Error C++错误提示框的处理,供大家参考。51Testing软件测试网B
U\8`%^.w
51Testing软件测试网3~!^3b-rj:W3Ua9}
E5OL.w&U4} r0 自动化测试的执行过程是无人值守的,所以对于执行过程中的异常处理就显得尤其重要。在我们碰到的各种异常中,IE浏览器抛出的Runtime Error c++的错误提示框无疑是最致命的,因为他会阻塞IE线程,导致RFT的执行线程挂起.对于web端的自动化测试来说,最令人沮丧的事情无非就是早上到公司后,看到屏幕上晃着一个大大的“Runtime error C++”提示框,这意味着自动化测试脚本的执行线程会被挂起,后面所有的脚本都不会得到执行。大家要注意一点,无论你在脚本做什么样的处理,对于这个提示框都无能为力,因为执行线程已经挂起了,你写的所有代码都无能为力。
4{M!H(O:h'?0r1_
W5KRz!YM8B|0 对于这个问题的处理其实也简单,那就是我们再写一个值守线程,当RFT的自动化测试启动运行时,值守线程同时启动,它每隔一定的时间就扫描当前屏幕上的测试对象,如果发现Runtime Error C++的错误提示框,就关闭它,这样可以保证后续的脚本能继续执行,当然,出现Runtime的脚本就作为异常放弃了。不过这个代价我们还是可以接收的。
5J c t5QI051Testing软件测试网T'x"ghP1RY7D 代码实现上,需要用到JAVA的Runable接口和RFT的IWindow接口,JAVA的Runnable接口实现值守线程,IWindow接口实现界面对象的扫描和查找。51Testing软件测试网4qW0yT$nZ5B
51Testing软件测试网;[Zx r7Q首先我们创建一个线程对象:51Testing软件测试网g[t6FkyoY t`Cl
public class DaemonThread extends Thread{} |
F[J hwp9b0实现其run()方法51Testing软件测试网+{$Vy$jdKk-c;j
public void run(){51Testing软件测试网M.S)RL)],MK while(true){51Testing软件测试网x0c!p+cCu int count = 0;51Testing软件测试网*H}&C$CPei]F if(count > 30){51Testing软件测试网N|8A
gJKUg1f //每隔30秒扫描一次当前界面51Testing软件测试网8e:|J:zF0\ findAndCloseRuntimeErrorDlg();51Testing软件测试网!h%N4i!s3U
d
@2zw count = 0;51Testing软件测试网cq0]"_-m`8~ }else{51Testing软件测试网"Z3BY7R_Xj
o //让出CPU资源51Testing软件测试网} xSY
`,S
s8PmsE[ try {51Testing软件测试网6\+i[1F9e$n-^m"`/b[ Thread.sleep(1000); IC0z*_d0 count++; Pr3tP
_0 } catch (InterruptedException e) { 4wZ'].x
O0 // TODO Auto-generated catch block51Testing软件测试网F(W$L0z8G$blv+T e.printStackTrace(); -bbqnH C
RD}0 }51Testing软件测试网`,U6OD6}F }51Testing软件测试网1XDl bAwU }51Testing软件测试网7G9D8pyW"Z,n"d } |
51Testing软件测试网6\"|AiG^K[ \)[findAndCloseRuntimeErrorDlg的实现51Testing软件测试网%S i&sc[2Up
public void closeRuntimeErorDlg(){ .Gb
sg6e#a0 IWindow[] wins = getTopWindows();51Testing软件测试网 s4blJEs]AayP for(int i = 0; i < wins.length; i++){ Mv(h2z/XR-q0 String text = wins[i].getText();51Testing软件测试网V/A~Ii1W5?G} /*51Testing软件测试网t~,tSV)_A * 如果在当前窗口中有Runtime Error C++,则执行关闭IE的操作51Testing软件测试网cc2a1\}0PQn{ */51Testing软件测试网e$v?Q l!bm7]c if(text.contains("C++ Runtime Library ")){ OB(B%Bzf2n)[0 try {51Testing软件测试网k8|W6tr6] Runtime.getRuntime().exec("cmd /c taskkill iexplorer.exe"); w
Q2acx@y0 Runtime.getRuntime().exec("cmd /c taskkill firefox.exe");51Testing软件测试网^
xV[j+M%z!A break;51Testing软件测试网 x;EK8w4P
`MIV } catch (IOException e) { o~0B#wSG)V.w0 // TODO 自动生成 catch 块51Testing软件测试网$PD'X9a!Y^ e.printStackTrace();
j9JX)RtOsN0 } 9G+t3CTi%t1Ua0MEHH0 }
ebU S0w,nhzyR0 } ,u!Nq/j`7T#{"V&iZ0 wins = null; V~5@.ZxX/[w^P
i0 } |
51Testing软件测试网t:LP~&z'w值守线程的启动:
:b#br0|7AWA0Thread t = new DaemonThread();51Testing软件测试网\*VU^U8I q!}uj t.start(); |
51Testing软件测试网*~CI2C z-D{3J7QM L9h2Xxt)La0 实现以上代码后,我们把启动代码加到RFT的执行队列中,当脚本开始执行时,值守线程也随之启动,每隔30秒检查一下当前界面,如果界面中出现了Runtime Error C++提示框,则会关闭IE,以避免执行队列被挂起,从而保证了所有的测试脚本都能得到执行。
wtB2@|?
o04hm1dBO`b051Testing软件测试网#DwBv2SS
J#y1S9D3CW
"X'Vi2TCp9R051Testing软件测试网1kB)_~iq:?5s
收藏
举报
TAG: