测试分析(monkey,monekyrunner,uiautomator,Robotium,单元测试,启动性能):
$adb shell monkey -p com.nobody.appfilter -v 500; #monkey测试;
monkey命令源码位置:development/cmds/monkey/src/com/android/commands/monkey;
monkeyrunner.jar包在sdk的sdk/tools/lib;monkeyrunner.jar/chimpchat.jar/draw9patch.jar等prebuilt的工具;
$monkeyrunner runner.py;#运行monkeyrunner的py脚本;
$adb shell input text textInput//模拟输入textInput字符串;模拟事件全部是通过input命令来实现的;
$adb shell input keyevent 3;#模拟home按键;
$adb shell input tap 250 250;#tap模拟的是touch屏幕的事件,只需给出x/y坐标即可;
$adb shell input swipe 250 250 300 300;#关于swipe同tap是一样的,只是他是模拟滑动的事件,给出起点和终点的坐标即可;
uiautmotor需继承UiAutomatorTestCase;UiAutomatorTestCase继承了JUnit的TestCase;
$adb shell uiautomator runtest LaunchSettings.jar -c com.uia.example.my.LaunchSettings; #uiautomator语法;
UI automation test should extend UiAutomatorTestCase;
public class UiAutomatorTestCase extends TestCase{ *** };com.android.uiautomator.testrunner包;/frameworks/testing/uiautomator/library/testrunner-src/com/android/uiautomator/testrunner目录;
public abstract class TestCase extends Assert implements Test{ *** };junit.framework包;/external/junit/src/junit/framework目录;
public final class UiAutomation{ *** };android.app包;内部利用IAccessibilityServiceConnection进行与AccessibilityManagerService的binder通讯;
Robotium需继承ActivityInstrumentationTestCase2;第三方jar对操作进行了一系列的封装;
public abstract class ActivityInstrumentationTestCase2<T extends Activity> extends ActivityTestCase{ *** };android.test包;/frameworks/base/test-runner/src/android/test;
单元测试需继承ActivityUnitTestCase;
public abstract class ActivityUnitTestCase<T extends Activity> extends ActivityTestCase{ *** };android.test包;/frameworks/base/test-runner/src/android/test;
$adb shell am instrument –w XXXXXX; #-w是指定Instrumentation类的参数标志;
启动性能,LaunchPerformanceBase是是启动性能测试容器;
public class LaunchPerformanceBase extends Instrumentation{ *** };android.test包;@hide;android.test包;/frameworks/base/test-runner/src/android/test;
mConext.startInstrumentation(*);//启动执行Instrumentation类; //apiDemo中的示例;
mInstrumentation.startActivitySync(*);//启动activity; mInstrumentation.runOnMainSync(*)//调用activity的主线程; mInstrumentation.waitForIdleSync(*);//等待application返回;
$adb shell getevent /dev/input/event0; “0001 014a 00000001”,type事件类型码,code扫描码或键值,value值;
在Activity中,直接启动单线程调用 mInstrumentation.sendStringSync("aa"); //动作注入,必须是同一uid的程序;
adbShell动作注入调用的是 InputManager.getInstance().injectInputEvent(*);
//InputManager类位于/frameworks/base/core/java/android/hardware/input下;getInstance()的Api为hide;
$make cts #android源码编译好后,在编译cts.生成目录在out/host/linux-x86/cts/下.官网,http://source.android.com/compatibility/cts-intro.html
源码下,$make cts; #生成目录在/out/host/linux-x86/cts/*下;
$sudo chmod 777 cts-tradefed; #在/out/host/linux-x86/cts/android-cts/tools目录;
$./cts-tradefed; #启动;
$list packages; #列举已安装的cts测试;
$run cts --p zzz.android.monkey; #进行cts测试;
UiAutomator:
$uiautomatorviewer; #<android-sdk>/tools/目录下;能够显示View结构;
$android create uitest-project -n uiTest -t 1 -p UiAutomator/; #生成build文件;
$ant build; #build测试jar文件;
$adb push uiTest.jar /data/local/tmp/; #push文件;
$adb shell uiautomator runtest uiTest.jar -c com.uia.example.my.LaunchSettings; #运行;