文档章节

Roboitum中加入失败重跑机制

youthflies
 youthflies
发布于 2014/10/14 21:08
字数 470
阅读 347
收藏 4

原址 http://www.yeetrack.com/?p=987

Robotium是个开源的android功能测试自动化框架,比较流行。我平时使用robotium+maven+spoon,这样的组合做androd自动化。做界面自动化,尤其是移动端,case经常失败,网络问题、等待机制不合理、手机问题等等。一个case失败后,再次运行可能又正常了,这种情况很多。其实我们在使用Robotium时,可以手动实现case失败后,重跑几次,如果几次都失败了,那么case才判定为失败。

方法

使用Robotium要继承Robotium的ActivityInstrumentationTestCase2这个抽象类,并且要实现其中的setup、tearDown方法。其中还有一个方法runTest就是控制执行我们的测试用例的,我们可以重载这个方法,实现case失败后重跑。代码如下:

@Override
protected void runTest() throws Throwable {
    int retryTimes = 3;

    while(retryTimes > 0)
    {
        try{
            Log.d("Robotium", "super");
            super.runTest();
            break;
        } catch (Throwable e)
        {
            if(retryTimes > 1) {
                Log.d("Robotium", "fail,重跑--"+retryTimes);
                retryTimes--;
                tearDown();
                setUp();
                continue;
            }
            else
                throw e;  //记得抛出异常,否则case永远不会失败
        }
    }
}

Over,就这么简单。

Spoon截图重复

因为我使用spoon插件,重跑会导致截图重复出现。我现在时修改下Spoon-client的源码。在Spoon-client的Spoon这个final类中,有截图的实现方法。部分代码如下:

public static File screenshot(Activity activity, String tag)        {
    if (!TAG_VALIDATION.matcher(tag).matches()) {
    throw new IllegalArgumentException("Tag must match " + TAG_VALIDATION.pattern() + ".");
    }
    try {
    File screenshotDirectory =      obtainScreenshotDirectory(activity);
    String screenshotName = System.currentTimeMillis() +        NAME_SEPARATOR + tag + EXTENSION;
    File screenshotFile = new File(screenshotDirectory,         screenshotName);
    takeScreenshot(screenshotFile, activity);
    Log.d(TAG, "Captured screenshot '" + tag + "'.");
    return screenshotFile;
    } catch (Exception e) {
    throw new RuntimeException("Unable to capture screenshot.", e);
    }
}

可以看到作者为了防止截图重复使用了时间戳方法System.currentTimeMillis(),这里我们就把时间戳去掉,让重复的截图直接覆盖。

代码改完,打到本地maven仓库,或者私服,使用即可。

附上android-spoon插件地址:https://github.com/square/spoon

本文转载自:http://www.yeetrack.com/?p=987

共有 人打赏支持
youthflies
粉丝 44
博文 247
码字总数 139731
作品 0
海淀
QA/测试工程师
TestNG 监听器扩展插件--NetEase Arrow

TestNG 是一个设计用来简化广泛测试需求的 测试框架,旨在涵盖所有类型的测试,包括单元测试、功能测试、端到端集成测试等,而我们在基于TestNG搭建自动化测试框架,编写测试用例时,为保证测...

叶秀兰
2014/09/23
1K
0
TestNG 失败重跑和截图原理

背景 UI自动化脚本执行过程中存在非常多的不稳定性,例如网络的不稳定,浏览器无响应等等,这些失败往往并不是产品中的错误。那么这时我们往往需要对执行失败的测试用例进行多次重跑,确认其...

米阳MeYoung
2017/10/30
0
0
Robot Framework --rerunfailed 的使用

RF --rerunfailed 功能是非常实用的,利用它可以在大量case第一次跑过后,从中筛选出失败的案例重新执行;结合rebot的 --merge 功能,可以重新输出output.xml,在Jenkins上展示出最后的测试结...

清风徐来的生活
2016/12/06
10
0
benjobs/OpenCron

opencron 一个功能完善真正通用的linux定时任务调度定系统,满足多种场景下各种复杂的定时任务调度,同时集成了linux实时监控,webssh,提供一个方便管理定时任务的平台. 你是否有定时执行任务计...

benjobs
2016/11/12
0
0
测试用例出错重跑--flaky插件

自动化测试的时候,经常会遇到这样的问题:大部分时候执行测试用例都能pass,只是偶然出现false,而出现false的时候是因为外部因素引起,比如WiFi不稳定、使用了第三方插件不稳定等,这些情况...

无言silence
2016/11/26
106
3

没有更多内容

加载失败,请刷新页面

加载更多

Spring事务管理

事务的特性 原子性 不可分割 一致性 发生之前和之后事务总额不变 隔离性 不同时对同一事件进行事务处理 持久性 改变后保持不变 高层抽象接口 Spring事务管理高层抽象主要包括三个接口: 事务...

晨猫
1分钟前
0
0
pada redis server manager

ubuntu@node0:~$ cd /opt/software/redis-4.0.9/src/ubuntu@node5:/opt/software/redis-4.0.9/src$ ls -a. anet.h childinfo.c db.c endianconv.o geohas......

qwfys
1分钟前
0
0
cdn的内容路由技术

cdn网站加速作为提高流媒体内容传输的服务质量与节省网络宽带的技术已经应用的越来越广泛了,cdn的关键技术主要有内容路由技术、内容分发技术、内容存储技术和内容管理技术。 cdn负载均衡实现...

上树的熊
5分钟前
0
0
input 框背景提示文字

感谢@Kingchan 文章来自 http://www.cnblogs.com/tzdy/p/5969553.html 方法一:直接写标签上; 代码如下: <input type="text" value="提示内容" onFocus="if(value==defaultValue){value=''......

小黄狗
9分钟前
0
0
c++_CView

CView:视图程序设计中使用率最高的窗口对象,它是用户的主要操作界面。因为它通常以某种形式表示文档数据,所以称之为视图。一个视图对象只关联一个文档对象;一个文档对象可以关联多个视图,...

一个小妞
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部