通过值守线程处理自动化测试的Runtime error错误提示框
上一篇 /
下一篇 2012-06-16 10:29:04 / 天气: 晴朗
/ 心情: 高兴
/ 个人分类:RFT
51Testing软件测试网 I!jK6]!C2Blq#Z 自动化测试开发过程中,脚本的健壮性是一个永远的话题,健壮性差的脚本会导致运行失败,影响我们最终的自动化测试效果。笔者在做自动化测试过程中,曾深受各种异常的困扰,在这里先分享一个Runtime Error C++错误提示框的处理,供大家参考。51Testing软件测试网;{,c!I-sG
k
51Testing软件测试网:as W,^E/[K
!A3a([jh ?0 自动化测试的执行过程是无人值守的,所以对于执行过程中的异常处理就显得尤其重要。在我们碰到的各种异常中,IE浏览器抛出的Runtime Error c++的错误提示框无疑是最致命的,因为他会阻塞IE线程,导致RFT的执行线程挂起.对于web端的自动化测试来说,最令人沮丧的事情无非就是早上到公司后,看到屏幕上晃着一个大大的“Runtime error C++”提示框,这意味着自动化测试脚本的执行线程会被挂起,后面所有的脚本都不会得到执行。大家要注意一点,无论你在脚本做什么样的处理,对于这个提示框都无能为力,因为执行线程已经挂起了,你写的所有代码都无能为力。51Testing软件测试网m&O5_J@
fSaQcw7I2o0 对于这个问题的处理其实也简单,那就是我们再写一个值守线程,当RFT的自动化测试启动运行时,值守线程同时启动,它每隔一定的时间就扫描当前屏幕上的测试对象,如果发现Runtime Error C++的错误提示框,就关闭它,这样可以保证后续的脚本能继续执行,当然,出现Runtime的脚本就作为异常放弃了。不过这个代价我们还是可以接收的。
#^)H'n4G+Zx#k4q0g8q}{R#^o;w z
y0 代码实现上,需要用到JAVA的Runable接口和RFT的IWindow接口,JAVA的Runnable接口实现值守线程,IWindow接口实现界面对象的扫描和查找。
Y#rB{z3c#W k:dK|051Testing软件测试网)Oc:fP^Y2H-B首先我们创建一个线程对象:
k{%B9K0bs!W0public class DaemonThread extends Thread{} |
wZ.Ro#^iVv6k(O6Mm0实现其run()方法
9sG6M'e|+[0public void run(){
N4S0kr;HbD0 while(true){ U
I%n2U/B/`Z0 int count = 0; ? NM*p3[r{u$NE!b0 if(count > 30){ zK3N9pNa Uh8H0 //每隔30秒扫描一次当前界面51Testing软件测试网QV.M|W Cn&k findAndCloseRuntimeErrorDlg(); !OX+j/u'D`_T0 count = 0; Uh.X3L5y5eW-M0Z0 }else{51Testing软件测试网B(d*|8jF$m-jW.k | //让出CPU资源 1Y~q8}t%UKP}H/|,[0 try {51Testing软件测试网'X*_sH@\ Thread.sleep(1000);51Testing软件测试网 qs8OL
Ei*x count++;51Testing软件测试网+^u;vN;D/{B } catch (InterruptedException e) {51Testing软件测试网~1rM a:])H // TODO Auto-generated catch block51Testing软件测试网3dB/E^0}B] e.printStackTrace();51Testing软件测试网Aw SV? } Z6@$R:`@:cEz+T+lt0 }51Testing软件测试网6MQ+u"I(b5H*[ }
Ay"W/{Gm5Q:o0 } |
51Testing软件测试网Dq3g{7T@@
d;kCEfindAndCloseRuntimeErrorDlg的实现
6}'h4O@R9y)j,L0public void closeRuntimeErorDlg(){51Testing软件测试网qI1U9z~x IWindow[] wins = getTopWindows();51Testing软件测试网~k?_9b for(int i = 0; i < wins.length; i++){ [yj#rz0 String text = wins[i].getText();51Testing软件测试网aS4X(d,X*?7H{ ` /*
ybKLe:J@(u0 * 如果在当前窗口中有Runtime Error C++,则执行关闭IE的操作 GHyu!SC)E4pA?V0 */51Testing软件测试网R)A#UY-v(Ln if(text.contains("C++ Runtime Library ")){ 6[8R+E!w y*M^)F1N0 try {51Testing软件测试网f DI#S4^%Pe+[/I'\ Runtime.getRuntime().exec("cmd /c taskkill iexplorer.exe"); :Wq&uPD2SD/{N0 Runtime.getRuntime().exec("cmd /c taskkill firefox.exe"); ;H:hZKv2?p"rd0 break; 4Az,\_ZB6r*P}4}U0 } catch (IOException e) {51Testing软件测试网8jM9w#Y3Z
L // TODO 自动生成 catch 块51Testing软件测试网-R5?1znMk&qB~ e.printStackTrace(); 8h&\VZ5rg(?6k*g0 }51Testing软件测试网U6WNxX+Zx` }51Testing软件测试网1v!T
I'wJg&T4A }51Testing软件测试网
m$sqKV wins = null; $}Co E8o0 } |
w:{&]Bit;{9D*S0值守线程的启动:51Testing软件测试网`
g.p4k/n{5j:ukQ l
Thread t = new DaemonThread();51Testing软件测试网2h0G0Kc3|i t.start(); |
51Testing软件测试网UNaS\#i6|Yp;\Rf0 实现以上代码后,我们把启动代码加到RFT的执行队列中,当脚本开始执行时,值守线程也随之启动,每隔30秒检查一下当前界面,如果界面中出现了Runtime Error C++提示框,则会关闭IE,以避免执行队列被挂起,从而保证了所有的测试脚本都能得到执行。
\$~
{9ML}M!x0A
I4u-z1Mxo0
+kE4`A0`MDg7t9e051Testing软件测试网2D5Tg-v6N
L
sL"ka+mO[0
收藏
举报
TAG: