Android(安卓)Instrument自动测试:Wifi_service
Porting 了新的Wifi hardware_legancy,
这个时候需要对对 Android Wifi On/Off 作压力测试
发现可以使用Android Instrument 和Android Test Project 来做测试。
1. 在Eclipse 里新建 一个 Android Test Project.
测试代码
AllTest.java
[java] view plain copy print ?- packagecom.example.wifitoggle;
- importjunit.framework.Test;
- importjunit.framework.TestSuite;
- publicclassAllTests{
- publicstaticTestsuite(){
- TestSuitesuite=newTestSuite(
- "Testforcom.android.settings.testsuite");
- //$JUnit-BEGIN$
- //$JUnit-END$
- returnsuite;
- }
- }
WifiSettingTest.java
[java] view plain copy print ?- packagecom.example.wifitoggle.test;
- //importForwarding;
- importjunit.framework.Assert;
- importjunit.framework.TestCase;
- importandroid.app.Activity;
- importandroid.content.Intent;
- importandroid.net.wifi.WifiManager;
- importandroid.util.Log;
- importandroid.os.Bundle;
- importandroid.content.Context;
- importandroid.test.AndroidTestCase;
- publicclassWifiSettingTestextendsAndroidTestCase{
- privateWifiManagermWifiManager=null;
- privatefinalintTEST_COUNT=10;
- privatefinalintINTERVAL_DELAY_MS=2000;
- protectedvoidsetUp()throwsException{
- super.setUp();
- ContextserviceManager=getContext();
- mWifiManager=(WifiManager)serviceManager.getSystemService(Context.WIFI_SERVICE);
- }
- privatevoidsleep(intms){
- try{
- Thread.sleep(ms);
- }catch(InterruptedExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- publicvoidtestTurnOnOff(){
- booleanenable=false;
- booleanresult=false;
- for(inti=0;i<TEST_COUNT;i++){
- finalintWAIT_TIMEOUT_S=30;
- intwifiState=mWifiManager.getWifiState();
- if(wifiState==WifiManager.WIFI_STATE_ENABLED){
- result=false;
- Log.w("WIFITEST","Turningwifioff...");
- mWifiManager.setWifiEnabled(false);
- for(intj=0;j<WAIT_TIMEOUT_S;j++){
- sleep(1000);
- wifiState=mWifiManager.getWifiState();
- if(wifiState==WifiManager.WIFI_STATE_DISABLED){
- result=true;
- Log.w("WIFITEST","Turningwifioffsuccess.");
- break;
- }elseif(wifiState==WifiManager.WIFI_STATE_UNKNOWN){
- Log.w("WIFITEST","Turningwifiofffailed.");
- break;
- }
- }
- }elseif(wifiState==WifiManager.WIFI_STATE_DISABLED){
- result=false;
- Log.w("WIFITEST","Turningwifion...");
- mWifiManager.setWifiEnabled(true);
- for(intj=0;j<WAIT_TIMEOUT_S;j++){
- sleep(1000);
- wifiState=mWifiManager.getWifiState();
- if(wifiState==WifiManager.WIFI_STATE_ENABLED){
- result=true;
- Log.w("WIFITEST","Turningwifionsuccess.");
- break;
- }elseif(wifiState==WifiManager.WIFI_STATE_UNKNOWN){
- Log.w("WIFITEST","Turningwifionfailed.");
- break;
- }
- }
- }
- Assert.assertTrue(result);
- sleep(INTERVAL_DELAY_MS);
- }
- }
- }
AndroidManifest.xml
[xhtml] view plain copy print ?- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.wifitoggle.tests"
- android:versionCode="1"
- android:versionName="1.0"
- android:sharedUserId="android.uid.system">
- <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
- <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
- <uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>
- <uses-libraryandroid:name="android.test.runner"/>
- </application>
- <instrumentationandroid:targetPackage="com.example.wifitoggle.tests"android:name="android.test.InstrumentationTestRunner"/>
- </manifest>
2.Eclipse环境下的sdk版本可能与实际 Android src 不兼容。 所以测试 WIFI SERVICE 这类framework 层代码,
需要将 测试程序放到Android 环境下编译,而不是在Eclipse 下编译。
实现这一步,只要简单的写一个Android.mk 然后将测试程序 目录拷贝到 packages/app/ 下, 再运行 mm 编译即可.
Android.mk
[xhtml] view plain copy print ?- LOCAL_PATH:=$(callmy-dir)
- include$(CLEAR_VARS)
- #Weonlywantthisapkbuildfortests.
- LOCAL_MODULE_TAGS:=tests
- #Alsolinkagainstourowncustomlibrary.
- LOCAL_JAVA_LIBRARIES:=android.test.runner
- #LOCAL_JAVA_LIBRARIES+=com.android.settings
- #Includealltestjavafiles.
- LOCAL_SRC_FILES:=$(callall-java-files-under,src)
- LOCAL_PACKAGE_NAME:=wifitoggletest
- #LOCAL_INSTRUMENTATION_FOR:=wifitoggle
- LOCAL_CERTIFICATE:=platform
- include$(BUILD_PACKAGE)
# cd $ANDROID_PATH
# source ./build/envsetup.sh
# cd packages/app/WifiToggleTest
#mm
3.
wifitoggletest.apk 生成后就可以通过instrument 和 adb协议来测试 WIFI_SERVICE 功能了。
# croot
# adb uninstall com.example.wifitoggle.tests (It is not necessary for the first time running.)
# adb install ./out/target/product/eagle/data/app/wifitoggletest.apk
# adb shell am instrument -w com.example.wifitoggle.tests/android.test.InstrumentationTestRunner
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- Nginx系列教程(一)| 手把手教你在Linux环境下搭建Nginx服务
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Kotlin Android(安卓)WebView与H5的相互调用
- android源码单独编译的方法
- Android(安卓)Studio 编译时提示 Error: Please select android
- 导入xUtils_3 工程到Android(安卓)Studio
- Android之JNI:Android(安卓)Studio使用Gradle编译C/C++源码
- Android中Spinner控件之键值对用法实例分析