Robotium ROBOTIUM 多用例的问题,麻烦大侠帮忙看看啊?多谢!~

magicyang · 2015年02月04日 · 最后由 Heyniu 回复于 2016年07月24日 · 1342 次阅读

每次调 SOLO.finishOpenedActivities 都要重新登陆。
每个用例都要重新搞一遍登陆,太麻烦了。合在一起,单用例实现的功能又太多了。
遇到这种情况,大侠们是咋实现的啊?
有没有办法不回到初始 ACTIVITY,直接到第二个 ACTIVITY 的办法?
我目前个人理解 ROBOTIUM 是基于 INSTRUMENTS 的,INSTRUMENTS 提供的 API 是基于 ACITIVITY 监听的,这样看感觉上是没有办法让部分用例不回到初始 ACTIVITY 的。不知道这样理解有没有问题,望大侠解答啊。
现在的想法是 LOGIN 就全用例 LOGIN 一遍吧。。。

共收到 8 条回复 时间 点赞

instruments 和 instrumentation 是两个东西。。。。

@monkey 呃。。。谢谢 MONKEY 提醒啊。我还真当成一个东西了。。。。我再看看。。。

用例继承的 ActivityInstrumentationTestCase2
继承关系:
↳ android.test.InstrumentationTestCase
↳ android.test.ActivityTestCase
↳ android.test.ActivityInstrumentationTestCase2
public Instrumentation getInstrumentation ()
Added in API level 1Inheritors can access the instrumentation using this.
ROBOTIUM 单 ACTIVITY 实际上还是调的 instrumentation 的吧。
通过 launchActivity (String pkg, Class activityCls, Bundle extras) 进行第一次加载的吧?
这个类继承于 JUNIT,JUNIT 通过 setup 和 teardown 进行初始化。
我在网上搜到的结果都是说 TEARDOWN 执行完之后,必须回到初始界面,才能执行下一条用例,方法就是用 SOLO.FINISHOPENEDACTIVITIES,但是没说为什么不回到主界面就会阻塞啊?看 LOG 啥也没有么。。。。有没有大神以前遇到过,解答一下原理啊?
就在想有没有办法绕过去啊。~

给你一个思路

在 tearDown 方法里面,让 solo 回到初始的入口(Activity)后,再执行 teardown 的操作
如初始入口是 Index:
@Override
protected void tearDown() {
solo.goBackToActivity("Index");
try {
solo.finalize();
} catch (Throwable e) {
e.printStackTrace();
}
getActivity().finish();
try {
super.tearDown();
} catch (Exception e) {
e.printStackTrace();
}
}

一般登陆设计是,如果 activity 还活着,第 2 次登陆的时候就免登陆了,启动即可进入页面。你试试看,好了告诉我,我也正准备解决这样的问题。

#4 楼 @beerbox 有的应用是免登有业务逻辑的,有的没有。没有的话这个是过不去的

@beerbox @monkey
正如 MONKEY 说的,我现在就是这样的。。。。
两种登陆方式:正常登陆是记录手机信息的,LOGIN 的界面(初始界面),二次测试是会自己跳转到业务界面的。现在坑的是超级登陆方式,用户信息不记录,这样我每次都要从登陆界面开始重新弄起。这样所有用例就要加这部分。超级用户的话,不需要预先折腾手机;正常登陆的话,需要扫二维码或者登陆云账号,就要先折腾手机了,各有利弊吧。还要再考虑考虑测非登陆流程的用例怎么方便。。。。
正好在弄么,就索性把疑问拿出来大家讨论讨论。~

#6 楼 @yangchengtest 其实,你这种情况我建议就是做个免登。否则你就是每次都需要登录。因为你的登录不仅仅是一个状态,会去获取很多需要的参数。

😂
一年后才看到这个帖子
目前我发现一个简单粗暴的方法
robotium 与被测 app 处于同一进程的
所以可以直接调用 Intent 方法跳转到想去的页面,具体操作如下:
Class <?> loginActivity = Class.forName("XX.loginActivity");
Intent intent = new Intent();
intent.setClass(getActivity(), loginActivity);
getActivity().startActivity(intent);

magicyang 专栏文章:[该话题已被删除] 中提及了此贴 03月28日 13:48
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册