文档章节

Roboitum中加入失败重跑机制

youthflies
 youthflies
发布于 2014/10/14 21:08
字数 470
阅读 349
收藏 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
pytest的一些实用插件实践

前言 关于pytest就不多做介绍了,目前很多公司都在用的框架,选用该框架的理由很多啦,比如: 容易上手,入门简单,文档丰富,支持的第三方插件很多,文档中示例也很详细 支持运行node/unit...

迈阿密小白
01/09
0
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

没有更多内容

加载失败,请刷新页面

加载更多

WEB 开发总结

事务处理 事务的4个基本特征 1.Atomic(原子性),事务中包含的操作被看做是一个整体的业务单元,这个业务单元中的操作要么全部成功,要么全部失败,不会出现部分成功,部分失败的场景。 2....

北漂的我
18分钟前
2
0
thinkphp5 利用七牛云 将amr格式语音文件转为mp3

$card_id 是我的本地的文件 将问价名字的后缀名去掉注意access_token的有效期public function ceshi1($card_id){ $mediaid = substr($card_id, 0, -4); $accessKey = ...

小小小壮
22分钟前
1
0
数据区域之堆栈

java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域, 这些区域都有各自的用途,创建和销毁时间 图: 程序计数器是一个较小的内存空间,它的作用可以看做是当前...

恋码之子
22分钟前
1
0
新的一年,来看看大数据与AI的未来展望

本文由云+社区发表 作者:堵俊平 在数据爆炸与智能革命的新时代,新的平台与应用层出不穷,开源项目推动了前沿技术和业界生态快速发展。本次分享将以技术和生态两大视角来看大数据和人工智能...

腾讯云加社区
23分钟前
1
0
死磕源码系列(ReentrantLock)

前言 在高并发领域,ReentrantLock有着广泛的用处,防止多线程带来的并发问题 对于源码,很多人和我一开始一样都觉得非常神秘 这次我将对ReentrantLock进行全方面的揭秘 核心 AbstractQueued...

石日天
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部