安卓自动化测试总结(四)--用例执行失败后重复执行、每次运行失败
用例执行不成功时,重复执行的最多次数
自动化测试用例执行时,由于这样或那样的原因,总会出现运行不成功的情况,这会导致用例执行成功率很难达到100%。
为了提高用例执行成功率,我们使用WaitFor方法、最大最小超时时间来提高每个用例单次执行的成功率。不过,超时时间设的太大,也会导致每次运行多个用例时,使用的时间明显比超时时间设为默认时间时长很多。而设的较小,失败率又会明显增大。
因此,我们想到junit提供的运行失败时,多次执行失败用例的方法,来提高安卓自动化用例的执行成功率。这样,设置为默认超时时间或者其他感觉合适的超时时间后,在大部分用例测试结果正常后,还会多次执行某些界面异常导致的用例失败,这能保证提高成功率的情况下,不明显增加整体运行时间。
@Override
protected void runTest( )throws Throwable {
int retryTimes=TestConst.retryTimes; //重试次数
while (retryTimes> 0) {
try {
super.runTest();
ActivityInstrumentationTestCase5.timeSet(false); //调整超时时间的值, //ActivityInstrumentationTestCase5为继承ActivityInstrumentationTestCase2的类
break;
} catch (Throwablet) {
ActivityInstrumentationTestCase5.timeSet(true);
if (retryTimes> 1) {
retryTimes--;
tearDown();
setUp();
continue;
} else {
ActivityInstrumentationTestCase5.timeSet(false);
throw t;
}
}
}
}
每次重复执行时,设置怎样的超时时间
目前的超时设置策略是,第一次执行失败后,第二次执行则超时时间加倍,第三次则再次加倍。这样设置的原因是,刚开始开发界面自动化时,失败率比较高,而增加超时时间,确实提高了成功率。
目前,每次运行20个用例,成功率都是100%,10次运行,最多有一次某个用例失败。所以现在可以改变策略,以提高测出问题的几率,而不是成功率了,因为如果是显示某些界面较慢,也可能是故障的,而不是测试程序的问题。这时,可以保持超时时间和以前相同,或者稍微大些;甚至根据网络情况,来用某个系统乘以默认超时时间。
protected static void timeSet(boolean b) {
if(b) {
。。。。。。
}else{
。。。。。。
}
}