通过值守线程处理自动化测试的Runtime error错误提示框
上一篇 /
下一篇 2012-06-16 10:29:04 / 天气: 晴朗
/ 心情: 高兴
/ 个人分类:RFT
p![!a0[(o$u0 自动化测试开发过程中,脚本的健壮性是一个永远的话题,健壮性差的脚本会导致运行失败,影响我们最终的自动化测试效果。笔者在做自动化测试过程中,曾深受各种异常的困扰,在这里先分享一个Runtime Error C++错误提示框的处理,供大家参考。
G5|w
P/h.Dl(?,m)C0
#m3kW&W/l:iCVt051Testing软件测试网r0gV!Iw'y{f&p Y 自动化测试的执行过程是无人值守的,所以对于执行过程中的异常处理就显得尤其重要。在我们碰到的各种异常中,IE浏览器抛出的Runtime Error c++的错误提示框无疑是最致命的,因为他会阻塞IE线程,导致RFT的执行线程挂起.对于web端的自动化测试来说,最令人沮丧的事情无非就是早上到公司后,看到屏幕上晃着一个大大的“Runtime error C++”提示框,这意味着自动化测试脚本的执行线程会被挂起,后面所有的脚本都不会得到执行。大家要注意一点,无论你在脚本做什么样的处理,对于这个提示框都无能为力,因为执行线程已经挂起了,你写的所有代码都无能为力。51Testing软件测试网2w%V'G!]Zwg Cc
H:d!e7n cmxCR0 对于这个问题的处理其实也简单,那就是我们再写一个值守线程,当RFT的自动化测试启动运行时,值守线程同时启动,它每隔一定的时间就扫描当前屏幕上的测试对象,如果发现Runtime Error C++的错误提示框,就关闭它,这样可以保证后续的脚本能继续执行,当然,出现Runtime的脚本就作为异常放弃了。不过这个代价我们还是可以接收的。
:A:g\K\+T"jl0LJTxJ0 代码实现上,需要用到JAVA的Runable接口和RFT的IWindow接口,JAVA的Runnable接口实现值守线程,IWindow接口实现界面对象的扫描和查找。51Testing软件测试网1D'Im Mo C*N]
q,gjG+?(|8g0O0首先我们创建一个线程对象:51Testing软件测试网d;Vwn7FK{
public class DaemonThread extends Thread{} |
P'`}+Sl0实现其run()方法51Testing软件测试网TOW+d
Y`:q5a3p
public void run(){51Testing软件测试网OmM!ec'x\:Ivq while(true){51Testing软件测试网0yt3["fO-? int count = 0;51Testing软件测试网!}.wm)z@ if(count > 30){51Testing软件测试网hc9OP.?7sF}5z`B //每隔30秒扫描一次当前界面51Testing软件测试网F;YU["FE|
@ findAndCloseRuntimeErrorDlg();51Testing软件测试网#Q3W:F2v-[k count = 0;51Testing软件测试网l)\t0FNHV }else{ )D+F-B2X!Re8f%Y/Y8Z0 //让出CPU资源51Testing软件测试网*[ V;^/d&e:j try {51Testing软件测试网$K6A? E$du3]3k Thread.sleep(1000); G&[3o'l |4i%N)v0 count++;51Testing软件测试网p+kfk9p,A2I,Me(Uf7u } catch (InterruptedException e) { l-F5p2D(FT0 // TODO Auto-generated catch block UV7m{}*g2J0 e.printStackTrace();51Testing软件测试网0i9y)o%LH9i/{ } +?ojde2r0cHu0 } i7P
W&hod$IImCb0 } ,]%{%IOpeQ0 } |
~
?m'MF,gVVz0findAndCloseRuntimeErrorDlg的实现51Testing软件测试网(tN(L ES
public void closeRuntimeErorDlg(){ (h }hu `Y(Y#w!i5{d0 IWindow[] wins = getTopWindows(); Wc:|pM%AHs0 for(int i = 0; i < wins.length; i++){51Testing软件测试网ya v.k%f"`1Pt String text = wins[i].getText(); Kmx|'X1g0 /* _Ts.Co"M7kz3O0 * 如果在当前窗口中有Runtime Error C++,则执行关闭IE的操作51Testing软件测试网
] ?avu#S */ !F/zH1Bs
}7j
|8X0 if(text.contains("C++ Runtime Library ")){ t%P$n UhU2}"x0 try { k/].W-U-XI5_8i&I;} @0 Runtime.getRuntime().exec("cmd /c taskkill iexplorer.exe"); P*t+[*?{9o0 Runtime.getRuntime().exec("cmd /c taskkill firefox.exe"); *I?w
w(e _k0 break; !LXP8S
{I'M8K0 } catch (IOException e) { XQ?:Q;s/]A1@7A0 // TODO 自动生成 catch 块51Testing软件测试网!PvaqNb e.printStackTrace();51Testing软件测试网n&RI-QC[U}
T }51Testing软件测试网-Y%A6{B2uhHU } 4ZL:wM:`5rv(tX0 } Z
N-L"q2Z-{
o0 wins = null;51Testing软件测试网4Yv'kc|'Vi&Him(hw } |
51Testing软件测试网6k
s(|6V9[8Q值守线程的启动:51Testing软件测试网_e![#n;AG&H
Thread t = new DaemonThread();51Testing软件测试网{Q|8R,\6y? t.start(); |
dTi ~7Z1|[051Testing软件测试网(CMSI:p 实现以上代码后,我们把启动代码加到RFT的执行队列中,当脚本开始执行时,值守线程也随之启动,每隔30秒检查一下当前界面,如果界面中出现了Runtime Error C++提示框,则会关闭IE,以避免执行队列被挂起,从而保证了所有的测试脚本都能得到执行。51Testing软件测试网TJAq|"UC!T5T
51Testing软件测试网Ye(I2BM ^9Y51Testing软件测试网S._(B8E/P"y/g
Lg(CUr9y051Testing软件测试网7E3{[3` u
m5\,s ~
收藏
举报
TAG: