Android Studio在只有apk情况下的的robotium自动化框架应用
由于eclipse的ADT框架没有人维护,选用Android Studio来进行robotium的使用。
1. 准备一个重签名的测试apk
apk重签名:
重签名工具:github地址:https://github.com/pengwei1024/apkReSign/
下载使用点击文件夹jar里面的随意一个,
然后把所需要签名的apk拖入进去
然后出现这个提示就说明重签名成功
这也会显示包名和主activity
另外显示apk的包名和主activity 的方法:
终端进入sdk文件目录下的build-tools的26.0.1文件夹(因为里面有aapt文件)输入命令aapt dump badging xx.apk文件
2. 新建一个android项目
新建项目后,一开始默认为android,切换到project
3. 在app模块下的build.gradle文件中自定义一个task任务
注: (1).from后的apk是刚刚重签名的被测包,要把它放在app模块下
(2).into 后的路径是项目运行自动产生app-debug.apk的路径
在defaultConfig中定义被测试apk的包名和测试启动类InstrumentationTestRunner
还要在dependence添加一行androidTestImplementation ‘com.jayway.android.robotium:robotium-solo:5.2.1’
具体的build.gradle文件代码如下
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.xx.xx"//改成自己的包名
minSdkVersion 18
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'com.jayway.android.robotium:robotium-solo:5.2.1'
}
task copyTask(type: Copy) {
from 'test.apk'//将被测试apk放在工程app目录下
into 'build/outputs/apk/debug'//将apk复制到指定目录
rename { String fileName ->
fileName = "app-debug.apk" // 重命名
}
}
4.创建测试类
(1)把robotium-solo-5.2.1.jar复制到libs目录下
(2)在app模块下的src的androidTest的java目录下新建一个测试类Test, 继承父类ActivityInstrumentationTestCase2
TestDemo代码如下:
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
import com.robotium.solo.Solo;
public class TestDemo extends ActivityInstrumentationTestCase2 {
private static Class<?> launchActivityClass;
private static String mainActiviy = "com.xx.xx.xx";//改成自己apk的主activity
private static String packageName = "com.xx.xx";//改成自己的包名
public Solo solo;
static {
try {
Log.v("LoginTest","start============");
launchActivityClass = Class.forName(mainActiviy);
Log.v("LoginTest","end============");
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
e.printStackTrace();
throw new RuntimeException(e);
}
}
public TestDemo() {
super(launchActivityClass);
}
@Override
protected void setUp() throws Exception {
super.setUp();
Log.v("LoginTest","setUp============");
//this.activity = this.getActivity();
this.solo = new Solo(getInstrumentation());
getActivity();//唤醒程序
}
@Override
protected void tearDown() throws Exception {
solo.finishOpenedActivities();
}
public void testCase_001() {
//solo.sleep(5000);
//Log.e("123","启动测试成功");
//solo.unlockScreen();
solo.clickOnText("视频");
solo.sleep(10000);
//可以在这个函数里面填写简单的测试用例
}
}
我们是在testCase里面编写我们的测试用例,其他模块的用途自行查询哈。
5. 修改AndroidManifest.xml文件
package修改成我们被测包的包名
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xx.xx">//修改成自己apk的包名
application模块下的activity注释(原因还未查明,但是有的话会报错,大概是build.gradle文件里写了被测包的主activity?)
还要删除main模块下Java文件夹(它这里面有mainactivity类,上面已经注释掉activity模块了,所以这个文件也不需要了)
6. 运行测试
点击右上角的Edit Configurations,添加Android Instrumented Tests,
在before launch中添加gradle-aware make在输入框中输入,选择:app:copyTask, 确定后就大功告成。
然后点击运行,安装包就可以安装到手机然后进行测试