文档章节

Roboitum中加入失败重跑机制

youthflies
 youthflies
发布于 2014/10/14 21:08
字数 470
阅读 346
收藏 4
点赞 0
评论 0

原址 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
Elastic-Job 手动触发任务 可否支持任务参数?

您好, 我们经常遇到一些周期任务失败,需要重跑的需求。比如,一个Job每天运行一次。但是发现某一天Job执行失败了,处理完异常数据之后需要重新跑那一天的数据。 我需要把比如“20170622” ...

haoxinyue
2017/07/03
131
1
OpenMobile 与惠普合作 - 在 webOS 上运行 Android 应用

我相信大家在早些日子早就听说过这么档子事了,在2011年秋天的时候,该公司表示,通过 OpenMobile ACL,MeeGo设备可以直接把安卓系统软件资源拿来使用,而不需要开发者进行重编译或打包,运行...

虫虫
2012/03/08
1K
4
服务通信框架Gaea--client负载均衡和服务重连策略

作为一个分布式的服务框架,服务器的负载均衡,将是一个很重要的性能指标,将能够最大限度的利用多个服务器资源,为服务的高性能,高可扩展性提供最直接的有力支持。在这篇文章中,我们就来看...

le284
2013/11/23
0
0
JAVA集群调度系统--Cuckoo-Schedule

Cuckoo-Schedule是基于Quartz-Schedule的轻量级任务调度框架,具有易学习、易上手、开发高效稳定的特点。Demo地址:http://cuckoo.hellosr.com。 Cuckoo-Schedule对调度模块与执行模块进行解...

卡拉喵喵
2017/05/07
3K
3
Spark Shuffle数据处理过程与部分调优(源码阅读七)

  shuffle。。。相当重要,为什么咩,因为shuffle的性能优劣直接决定了整个计算引擎的性能和吞吐量。相比于Hadoop的MapReduce,可以看到Spark提供多种计算结果处理方式,对shuffle过程进行了...

雪童子
2016/11/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 你的朋友圈有点生锈了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @Devoes :分享Trademark的单曲《Only Love (电视剧《妙手仁心 II》插曲)》: 《Only Love (电视剧《妙手仁心 II》插曲)》- Trademark 手机党少...

小小编辑
54分钟前
54
5
【面试题】盲人坐飞机

有100位乘客乘坐飞机,其中有一位是盲人,每位乘客都按自己的座位号就坐。由于盲人看不见自己的座位号,所以他可能会坐错位置,而自己的座位被占的乘客会随便找个座位就坐。问所有乘客都坐对...

garkey
今天
1
0
谈谈神秘的ES6——(二)ES6的变量

谈谈神秘的ES6——(二)ES6的变量 我们在《零基础入门JavaScript》的时候就说过,在ES5里,变量是有弊端的,我们先来回顾一下。 首先,在ES5中,我们所有的变量都是通过关键字var来定义的。...

JandenMa
今天
1
0
arts-week1

Algorithm 594. Longest Harmonious Subsequence - LeetCode 274. H-Index - LeetCode 219. Contains Duplicate II - LeetCode 217. Contains Duplicate - LeetCode 438. Find All Anagrams ......

yysue
今天
1
0
NNS拍卖合约

前言 关于NNS的介绍,这里就不多做描述,相关的信息可以查看NNS的白皮书http://doc.neons.name/zh_CN/latest/nns_background.html。 首先nns中使用的竞价货币是sgas,关于sgas介绍可以戳htt...

红烧飞鱼
今天
1
0
Java IO类库之管道流PipeInputStream与PipeOutputStream

一、java管道流介绍 在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedOutputStream和管道输入流PipedInputStream完成线程间通信。多线程管道通信的...

老韭菜
今天
0
0
用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
今天
1
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
今天
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0
Mybaties入门介绍

Mybaties和Hibernate是我们在Java开发中应用的比较多的两个ORM框架。当然,目前Mybaties正在慢慢取代Hibernate,这是因为相比较Hibernate而言Mybaties性能更好,响应更快,更加灵活。我们在开...

王子城
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部