robotium 测试用例操作失败自动重跑测试用例方法

我们在做自动化的时候,偶尔会遇到测试用例莫名其妙的失败,再次运行又OK的情况。针对这种情况我们有必要在测试用例操作失败时自动重跑 来避免不必要的核查。

那么针对robotium框架该如何实现自动重跑测试用例呢?

导致测试用例中止可能会有以下几种情况:

1、我们自己的断言 junit.framework.AssertionFailedError(有bug的情况)这个类的根类是Error

2、测试用例抛出exception

3、被测应用进程crash

对于第一种情况,是我们不需要重跑的,第三种情况crash我们今天的方法还无法重跑(个人观点robotium针对crash的重跑是没有意义的),那么第二种情况才是我们应该重跑的情况

 

接下来我们就来实际操作如何重跑用例,在继承ActivityInstrumentationTestCase2的类中复写runTest直接看到代码(都有注释就不多说了)

 

@Override
protected void tearDown() throws Exception {
    solo.finishOpenedActivities();
}

@Override
protected void runTest() throws Throwable {
    int times = 2;//重试次数
    while (true) {
        try {
            super.runTest();
            Log.e("123",this.getClass().getSimpleName() + "/"+getName()+":测试成功");
            break;
        } catch (Exception e) {//测试过程发生Exception后的处理
            if (times > 0) {
                times--;
                tearDown();//释放资源
                Runtime run = Runtime.getRuntime();
                try {
                    //启动被测app
                    run.exec("am start --user 0 -n 被测app包名/被测app launchactivity");
                } catch (Exception e1) {
                    throw new RunTestException(e1);
                }
                setUp();//初始化重新开始
                continue;
            } else {
                solo.takeScreenshot(this.getClass().getSimpleName() + "/"+getName());
                Log.e("123",this.getClass().getSimpleName() + "/"+ getName() + ":测试执行过程中出现异常");
                throw new RunTestException(e);
            }
        } catch (AssertionFailedError e2) {
            Log.e("123", this.getClass().getSimpleName() + "/"+getName() + ":测试失败");
            solo.takeScreenshot(this.getClass().getSimpleName() + "/"+getName());
            throw new OperationErrorException(e2);
        }
    }
}

 

接下来我们试一试,直接在测试用例中跑出一个异常,重跑2次

 

 

public void testCase_001()  {
    solo.sleep(5000);
    Log.e("123", "启动测试123");
    throw new RuntimeException("运行时异常");
}

我们的logcat中打印信息为:

 

02-10 15:19:17.263 26812-26849/? E/123: 启动测试123
02-10 15:19:23.923 26812-26849/? E/123: 启动测试123
02-10 15:19:30.273 26812-26849/? E/123: 启动测试123
02-10 15:19:30.403 26812-26849/? E/123: TestDemo/testCase_001:测试执行过程中出现异常

先跑的一次+重跑的2次正好打印了3次,看来我们的重跑是成功的(也可以在设备上观察是否重跑了)

那我们再来看看断言错误是如何处理的,同样重启次数定义为2,在测试用用例直接面断言错误,

 

public void testCase_001()  {
    solo.sleep(5000);
    Log.e("123", "启动测试123");
    assertTrue(false);
}

 

 

 

运行后logcat的结果为:

02-10 15:31:14.657 32393-32428/? E/123: 启动测试123
02-10 15:31:14.657 32393-32428/? E/123: TestDemo/testCase_001:测试失败

正常断言失败后并未重跑达到了我们的目的。

如果有其它问题或不清楚的地方还请留言

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值