通过值守线程处理自动化测试的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-r j:W3Ua9}

E5OL.w&U4} r0    自动化测试的执行过程是无人值守的,所以对于执行过程中的异常处理就显得尤其重要。在我们碰到的各种异常中,IE浏览器抛出的Runtime Error c++的错误提示框无疑是最致命的,因为他会阻塞IE线程,导致RFT的执行线程挂起.对于web端的自动化测试来说,最令人沮丧的事情无非就是早上到公司后,看到屏幕上晃着一个大大的“Runtime error C++”提示框,这意味着自动化测试脚本的执行线程会被挂起,后面所有的脚本都不会得到执行。大家要注意一点,无论你在脚本做什么样的处理,对于这个提示框都无能为力,因为执行线程已经挂起了,你写的所有代码都无能为力。

4{M!H(O:h'?0

r1_ W5KRz!YM8B|0    对于这个问题的处理其实也简单,那就是我们再写一个值守线程,当RFT的自动化测试启动运行时,值守线程同时启动,它每隔一定的时间就扫描当前屏幕上的测试对象,如果发现Runtime Error C++的错误提示框,就关闭它,这样可以保证后续的脚本能继续执行,当然,出现Runtime的脚本就作为异常放弃了。不过这个代价我们还是可以接收的。

5J ct5QI051Testing软件测试网T'x"gh P1RY7D

    代码实现上,需要用到JAVA的Runable接口和RFT的IWindow接口,JAVA的Runnable接口实现值守线程,IWindow接口实现界面对象的扫描和查找。51Testing软件测试网4qW0yT$nZ5B

51Testing软件测试网;[Zxr7Q

首先我们创建一个线程对象: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 gJ KUg1f
                //每隔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 s g6e#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#w SG)V.w0                    // TODO 自动生成 catch 块51Testing软件测试网$PD'X9a!Y^
                    e.printStackTrace();
j9JX)RtO sN0                }
9G+t3CTi%t1Ua0MEH H0            }
ebUS0w,nhzyR0        }
,u!Nq/j`7T#{"V&iZ0        wins = null;
V ~5@.Zx X/[w^P i0    }
51Testing软件测试网t:LP~&z'w

值守线程的启动:

:b#br0|7A WA0
Thread t = new DaemonThread();51Testing软件测试网\*VU^U8I q!}u j
t.start();
51Testing软件测试网*~CI2C z-D{3J7Q

M L9h2Xxt)La0    实现以上代码后,我们把启动代码加到RFT的执行队列中,当脚本开始执行时,值守线程也随之启动,每隔30秒检查一下当前界面,如果界面中出现了Runtime Error C++提示框,则会关闭IE,以避免执行队列被挂起,从而保证了所有的测试脚本都能得到执行。

w tB2@|? o0

4hm1dBO`b051Testing软件测试网#DwBv2SS J#y1S9D3CW

"X'Vi2TCp9R051Testing软件测试网1kB)_~ iq:?5s

TAG:

小马菜菜的个人空间 引用 删除 dreamever   /   2012-09-19 19:42:10
RFT的Find方法有点类似于进程注入,基本上是因为访问了IE内存中不可访问的区域导致的,具体原因真心不明……
散步的SUN的个人空间 引用 删除 散步的SUN   /   2012-09-19 15:23:12
这个策略方法不错诶~咨询一下,为什么会总出现Runtime Error c++啊?
 

评分:0

我来说两句

Open Toolbar