Robotium Robotium 专题(二): Robotium 只有 apk 文件时进行测试

风吹麦浪 · 2014年12月04日 · 最后由 恒温 回复于 2016年09月08日 · 4470 次阅读
本帖已被设为精华帖!

这个只有 APK 的时候进行测试,是我亲身实践后,觉得这篇文章比较有用,所以就发在这里了!
昨天看到一个帖子写了对自动化的一些茫然,说句实话,我也觉得自动化现在用处不是特别大,但我觉得将来自动化是一个比较好得趋势,移动端虽然产品迭代快,但对一般性的回归测试,我觉得自动化还是能省一些时间的。
另外,还看到一些对测试感觉茫然的朋友,其实我想说,在现有的环境下,无论做什么事情或者什么工作,都会有厌烦的时候,但一定不要一感到厌烦就想放弃,然后找各种借口去给自己留后路,我个人认为只要勤奋、肯学习,无论是技术还是管理,用心坚持去做,都能做出一番自己的事业!
好了,长话短说,既然现在选择做测试,那么就把现有的测试做好,做精,做专,这样即使转行,也可以给自己一个好的交代!



首先:设置环境变量

  1. 配置 ANDROID_HOME 为 android sdk 的安卓目录,例如:D:\android-sdk
  2. 在 path 下添加这两个:
    %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;
    其次: 安装签名文件

  3. 因为 robotium 要求被测应用和测试代码要有一致的签名, 所以我们需要把下载到的 apk,通过 re-sign.jar 来产生 debug key 的 apk,这个重新生成的 apk 就会跟测试项目签名一致了
    re-sign.jar 可以从这里下载到:
    http://www.troido.de/re-sign.jar

  4. 下载完后,在命令行下 通过 java -jar re-sign.jar 就会出现一个节目,然后将 apk 拖到这个节目,就会自动生成一个 debug key 的 apk
    产生新 apk 的过程中会弹出一个信息框,记得截下图,因为里面有两个信息我们等会的代码中需要用到

  5. 安装产生的 apk。然后打开模拟器(模拟器器一定要打开才能安装成功),然后打开命令行 adb install mitalk_debug.apk(新生成 apk 的名称) , 或者双击 apk 文件也可以安装
    安装成功就可以再模拟器里看到该应用的图标了
    然后:创建项目 (使用米聊 apk)

  6. 打开 Eclipse,点击 File->New 一个 Android Test Project ApkTest, 然后点击下一步的时候选择 This project(因为我们没有米聊应用的源码),然后选择要在哪个 android 版本上测试

  7. 在该项目下创建一个包,com.mitalk.test,在该包下创建 LoginTest 类,如下

package com.mitalk.test;
//需要导入的包
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import com.jayway.android.robotium.solo.Solo;
@SuppressWarnings("rawtypes")
public class LoginTest extends ActivityInstrumentationTestCase2 {
       //定义变量
public Solo solo;
public Activity activity;
private static Class<?> launchActivityClass;
//对应re-sign.jar生成出来的信息框里的两个值
private static String mainActiviy = "com.xiaomi.channel.ui.ChannelLauncherActivity";
private static String packageName = "com.xiaomi.channel";
         static {
                  try {
                      launchActivityClass = Class
.                     forName(mainActiviy);
                    } catch (ClassNotFoundException e)
                   {
                  throw new RuntimeException(e);
                  }
                 }
@SuppressWarnings("unchecked")
public LoginTest() { 
super(packageName, launchActivityClass);
                          }
@Override
protected void setUp() throws Exception {
super.setUp();
this.activity = this.getActivity();
this.solo = new Solo(getInstrumentation(), getActivity());
}
public void testLoginWithIncorrentUsernameAndPassword() {
              //一定时间内等待text出现,否则就出错
              solo.waitForText("Log In", 1, 10000);
              //点击text “Log In”
              solo.clickOnText("Log In");
              //一定时间内等待text出现,否则就出错
              solo.waitForText("OK", 1, 2000);
              //输入text
              solo.enterText(0, "13559494170");
              solo.enterText(1, "123456");
              //点击text “OK”
              solo.clickOnText("OK");
              //等待出现下面的text后,进行验证
              solo.waitForText("Incorrect ID number or password.", 1, 10000);
              assertTrue(solo.searchText("Incorrect ID number or password.",true));
}
@Override
public void tearDown() throws Exception {
try {
this.solo.finishOpenedActivities();
} catch (Throwable e) {
e.printStackTrace();
}
this.activity.finish();
super.tearDown();
}
}
  1. 右键该项目,选择 property 然后选择 java build path, 选择 Add External JARs,选择下到的 robotium.jar

  2. 在跑测试用例之前,还需要修改下 AndroidManifest.xml 文件的 android:targetPackage 为被测应用的根的包名
    android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="com.xiaomi.channel" />

    最后: run as android junit test,就可以进行测试了

共收到 15 条回复 时间 点赞

只需要最后一步做断言吗?我是做几个关键步骤就断言的

#1 楼 @chin 这个就看自己的习惯啦!

你把代码格式化下。 适用 markdown 语法

#3 楼 @seveniruby 已经修改,谢谢提醒!

我不太明白 他这里说的 超时就会报错,如果超时出错是直接这条用例不往下执行了吗?

我是测试小白。。。提需求要代码和数据分离。。可以提示一下,Robotium 怎么办到呢?

#5 楼 @sunflower_minmin 是的,应该是不执行了,然后提示你哪里有错误。

#6 楼 @april46 没太明白你的意思啊,什么叫代码和数据分离??

@bill 我也不太懂。。。就我所知,比如说测登录吧,要成功的 case,还要各种失败的 case。这些用户名和密码什么的都是写在 excel 表格里的,直接拿出来用。我最近在想要怎么实现这个。我只会写简单的程序。。。

#9 楼 @april46 那就得看下如何从 EXCEL 表格读取数据了,然后循环读取数据后放到相应的控件中去,这样就可以操作了。

#10 楼 @bill 谢谢,我研究一下

楼主,我已经连问你好几个问题啦,是不是修改签名后的 apk 只能安装在模拟器上啊?这也就意味着执行用例的时候是在模拟器上跑的?

楼主,我装的 jdk1.8,但是用 re-sign 重新前面后的 apk 文件无法安装到手机或模拟器。这是怎么回事呢?

楼主,很想问一个问题,用 robotium 的时候不是可以写多个 case 一条一条执行吗,它的这个执行机制是第二条 case 必须要基于第一条 case 的结果才行吗

#12 楼 @harryguo 不是,真机也可以

恒温 [该话题已被删除] 中提及了此贴 09月08日 18:41
恒温 《Robotium 专题》 合集 中提及了此贴 12月02日 18:24
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册