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 ?
  1. packagecom.example.wifitoggle;
  2. importjunit.framework.Test;
  3. importjunit.framework.TestSuite;
  4. publicclassAllTests{
  5. publicstaticTestsuite(){
  6. TestSuitesuite=newTestSuite(
  7. "Testforcom.android.settings.testsuite");
  8. //$JUnit-BEGIN$
  9. //$JUnit-END$
  10. returnsuite;
  11. }
  12. }
package com.example.wifitoggle; import junit.framework.Test; import junit.framework.TestSuite; public class AllTests { public static Test suite() { TestSuite suite = new TestSuite( "Test for com.android.settings.testsuite"); //$JUnit-BEGIN$ //$JUnit-END$ return suite; } }

WifiSettingTest.java

[java] view plain copy print ?
  1. packagecom.example.wifitoggle.test;
  2. //importForwarding;
  3. importjunit.framework.Assert;
  4. importjunit.framework.TestCase;
  5. importandroid.app.Activity;
  6. importandroid.content.Intent;
  7. importandroid.net.wifi.WifiManager;
  8. importandroid.util.Log;
  9. importandroid.os.Bundle;
  10. importandroid.content.Context;
  11. importandroid.test.AndroidTestCase;
  12. publicclassWifiSettingTestextendsAndroidTestCase{
  13. privateWifiManagermWifiManager=null;
  14. privatefinalintTEST_COUNT=10;
  15. privatefinalintINTERVAL_DELAY_MS=2000;
  16. protectedvoidsetUp()throwsException{
  17. super.setUp();
  18. ContextserviceManager=getContext();
  19. mWifiManager=(WifiManager)serviceManager.getSystemService(Context.WIFI_SERVICE);
  20. }
  21. privatevoidsleep(intms){
  22. try{
  23. Thread.sleep(ms);
  24. }catch(InterruptedExceptione){
  25. //TODOAuto-generatedcatchblock
  26. e.printStackTrace();
  27. }
  28. }
  29. publicvoidtestTurnOnOff(){
  30. booleanenable=false;
  31. booleanresult=false;
  32. for(inti=0;i<TEST_COUNT;i++){
  33. finalintWAIT_TIMEOUT_S=30;
  34. intwifiState=mWifiManager.getWifiState();
  35. if(wifiState==WifiManager.WIFI_STATE_ENABLED){
  36. result=false;
  37. Log.w("WIFITEST","Turningwifioff...");
  38. mWifiManager.setWifiEnabled(false);
  39. for(intj=0;j<WAIT_TIMEOUT_S;j++){
  40. sleep(1000);
  41. wifiState=mWifiManager.getWifiState();
  42. if(wifiState==WifiManager.WIFI_STATE_DISABLED){
  43. result=true;
  44. Log.w("WIFITEST","Turningwifioffsuccess.");
  45. break;
  46. }elseif(wifiState==WifiManager.WIFI_STATE_UNKNOWN){
  47. Log.w("WIFITEST","Turningwifiofffailed.");
  48. break;
  49. }
  50. }
  51. }elseif(wifiState==WifiManager.WIFI_STATE_DISABLED){
  52. result=false;
  53. Log.w("WIFITEST","Turningwifion...");
  54. mWifiManager.setWifiEnabled(true);
  55. for(intj=0;j<WAIT_TIMEOUT_S;j++){
  56. sleep(1000);
  57. wifiState=mWifiManager.getWifiState();
  58. if(wifiState==WifiManager.WIFI_STATE_ENABLED){
  59. result=true;
  60. Log.w("WIFITEST","Turningwifionsuccess.");
  61. break;
  62. }elseif(wifiState==WifiManager.WIFI_STATE_UNKNOWN){
  63. Log.w("WIFITEST","Turningwifionfailed.");
  64. break;
  65. }
  66. }
  67. }
  68. Assert.assertTrue(result);
  69. sleep(INTERVAL_DELAY_MS);
  70. }
  71. }
  72. }
package com.example.wifitoggle.test; //import Forwarding; import junit.framework.Assert; import junit.framework.TestCase; import android.app.Activity; import android.content.Intent; import android.net.wifi.WifiManager; import android.util.Log; import android.os.Bundle; import android.content.Context; import android.test.AndroidTestCase; public class WifiSettingTest extends AndroidTestCase { private WifiManager mWifiManager = null; private final int TEST_COUNT = 10; private final int INTERVAL_DELAY_MS = 2000; protected void setUp() throws Exception { super.setUp(); Context serviceManager = getContext(); mWifiManager = (WifiManager) serviceManager.getSystemService(Context.WIFI_SERVICE); } private void sleep(int ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void testTurnOnOff() { boolean enable = false; boolean result = false; for(int i = 0; i < TEST_COUNT; i++) { final int WAIT_TIMEOUT_S = 30; int wifiState = mWifiManager.getWifiState(); if(wifiState == WifiManager.WIFI_STATE_ENABLED) { result = false; Log.w("WIFI TEST", "Turning wifi off..."); mWifiManager.setWifiEnabled(false); for(int j = 0; j < WAIT_TIMEOUT_S; j ++) { sleep(1000); wifiState = mWifiManager.getWifiState(); if(wifiState == WifiManager.WIFI_STATE_DISABLED) { result = true; Log.w("WIFI TEST", "Turning wifi off success."); break; } else if (wifiState == WifiManager.WIFI_STATE_UNKNOWN) { Log.w("WIFI TEST", "Turning wifi off failed."); break; } } } else if (wifiState == WifiManager.WIFI_STATE_DISABLED) { result = false; Log.w("WIFI TEST", "Turning wifi on..."); mWifiManager.setWifiEnabled(true); for(int j = 0; j < WAIT_TIMEOUT_S; j ++) { sleep(1000); wifiState = mWifiManager.getWifiState(); if(wifiState == WifiManager.WIFI_STATE_ENABLED) { result = true; Log.w("WIFI TEST", "Turning wifi on success."); break; } else if (wifiState == WifiManager.WIFI_STATE_UNKNOWN) { Log.w("WIFI TEST", "Turning wifi on failed."); break; } } } Assert.assertTrue(result); sleep(INTERVAL_DELAY_MS); } } }

AndroidManifest.xml

[xhtml] view plain copy print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.wifitoggle.tests"
  4. android:versionCode="1"
  5. android:versionName="1.0"
  6. android:sharedUserId="android.uid.system">
  7. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  8. <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
  9. <uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>
  10. <uses-libraryandroid:name="android.test.runner"/>
  11. </application>
  12. <instrumentationandroid:targetPackage="com.example.wifitoggle.tests"android:name="android.test.InstrumentationTestRunner"/>
  13. </manifest>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns: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"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-library android:name="android.test.runner" /> </application> <instrumentation android: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 ?
  1. LOCAL_PATH:=$(callmy-dir)
  2. include$(CLEAR_VARS)
  3. #Weonlywantthisapkbuildfortests.
  4. LOCAL_MODULE_TAGS:=tests
  5. #Alsolinkagainstourowncustomlibrary.
  6. LOCAL_JAVA_LIBRARIES:=android.test.runner
  7. #LOCAL_JAVA_LIBRARIES+=com.android.settings
  8. #Includealltestjavafiles.
  9. LOCAL_SRC_FILES:=$(callall-java-files-under,src)
  10. LOCAL_PACKAGE_NAME:=wifitoggletest
  11. #LOCAL_INSTRUMENTATION_FOR:=wifitoggle
  12. LOCAL_CERTIFICATE:=platform
  13. include$(BUILD_PACKAGE)
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) # We only want this apk build for tests. LOCAL_MODULE_TAGS := tests # Also link against our own custom library. LOCAL_JAVA_LIBRARIES := android.test.runner #LOCAL_JAVA_LIBRARIES += com.android.settings # Include all test java files. LOCAL_SRC_FILES := $(call all-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

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Nginx系列教程(一)| 手把手教你在Linux环境下搭建Nginx服务
  3. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  4. Kotlin Android(安卓)WebView与H5的相互调用
  5. android源码单独编译的方法
  6. Android(安卓)Studio 编译时提示 Error: Please select android
  7. 导入xUtils_3 工程到Android(安卓)Studio
  8. Android之JNI:Android(安卓)Studio使用Gradle编译C/C++源码
  9. Android中Spinner控件之键值对用法实例分析

随机推荐

  1. MySQL 视图(View)原理解析
  2. 超详细教你怎么升级Mysql的版本
  3. 详解mysql三值逻辑与NULL
  4. MySQL时间盲注的五种延时方法实现
  5. 分析MySQL抛出异常的几种常见解决方式
  6. 详解MySQL数据库千万级数据查询和存储
  7. 详解MySQL连接挂死的原因
  8. 详解Mysql和Oracle之间的误区
  9. 详解GaussDB for MySQL性能优化
  10. 详解MySQL的Seconds_Behind_Master