android测试中如何控制wifi

在进行robotium 编写自动化测试用例的时候,有些case 需要控制网络来进行验证,这个时候就需要来回关闭,打开wifi 连接。在网上搜了一下,使用方法比较简单,整理如下:

1、首先需要在app中的 AndroidManifest.xml 文件中申请wifi的访问权限,配置如下:

Xml代码  

  1. <!--申请操作wifi的权限 -->
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
  3. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  4. <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

2、java wifi控制代码如下:

  1. import java.util.List;  
    
    import android.content.Context;
    import android.net.wifi.ScanResult;
    import android.net.wifi.WifiConfiguration;
    import android.net.wifi.WifiInfo;
    import android.net.wifi.WifiManager;
    import android.net.wifi.WifiManager.WifiLock;  
    
    public class WifiAdmin{//代码来自网络,原址找不到了……
        private WifiManager mWifiManager;   //定义WifiManager对象  
    
        private WifiInfo mWifiInfo; //定义WifiInfo对象  
    
        private List<ScanResult> mWifiList;   //扫描出的网络连接列表  
    
        private List<WifiConfiguration> mWifiConfiguration;   //网络连接列表  
    
        WifiLock mWifiLock; //定义一个WifiLock  
    
        public  WifiAdmin(Context context){
            mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);        //取得WifiManager对象
            mWifiInfo = mWifiManager.getConnectionInfo();       //取得WifiInfo对象
        }
        //打开WIFI
        public void openWifi(){
            if (!mWifiManager.isWifiEnabled()){
                mWifiManager.setWifiEnabled(true);
            }
        }
        //关闭WIFI
        public void closeWifi(){
            if (mWifiManager.isWifiEnabled()){
                mWifiManager.setWifiEnabled(false);
            }
        }
        //锁定WifiLock,当下载大文件时需要锁定
        public void acquireWifiLock(){
            mWifiLock.acquire();
        }  
    
        public void releaseWifiLock(){//解锁WifiLock
            //判断时候锁定
            if (mWifiLock.isHeld()){
                mWifiLock.acquire();
            }
        }  
    
        public void creatWifiLock(){//创建一个WifiLock
            mWifiLock = mWifiManager.createWifiLock("Test");
        }  
    
        public List<WifiConfiguration> getConfiguration(){    //得到配置好的网络
            return mWifiConfiguration;
        }  
    
        public void connectConfiguration(int index){//指定配置好的网络进行连接
            //索引大于配置好的网络索引返回
            if(index > mWifiConfiguration.size()){
                return;
            }
            //连接配置好的指定ID的网络
            mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true);
        }  
    
        public void startScan(){
            mWifiManager.startScan();       //得到扫描结果
            mWifiList = mWifiManager.getScanResults();
            mWifiConfiguration = mWifiManager.getConfiguredNetworks();//得到配置好的网络连接
        }  
    
        public List<ScanResult> getWifiList(){//得到网络列表
            return mWifiList;
        }  
    
        public StringBuilder lookUpScan(){//查看扫描结果
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < mWifiList.size(); i++){
                stringBuilder.append("Index_"+new Integer(i + 1).toString() + ":");
                //将ScanResult信息转换成一个字符串包
                //其中把包括:BSSID、SSID、capabilities、frequency、level
                stringBuilder.append((mWifiList.get(i)).toString());
                stringBuilder.append("\n");
            }
            return stringBuilder;
        }  
    
        //得到MAC地址
        public String getMacAddress()   {
            return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
        }  
    
        //得到接入点的BSSID
        public String getBSSID(){
            return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
        }  
    
        //得到IP地址
        public int getIPAddress(){
            return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
        }  
    
        //得到连接的ID
        public int getNetworkId(){
            return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
        }
        //得到WifiInfo的所有信息包
        public String getWifiInfo(){
            return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
        }  
    
        //添加一个网络并连接
        public void addNetwork(WifiConfiguration wcg){
            int wcgID = mWifiManager.addNetwork(wcg);
            mWifiManager.enableNetwork(wcgID, true);
        }
        //断开指定ID的网络
        public void disconnectWifi(int netId){
            mWifiManager.disableNetwork(netId);
            mWifiManager.disconnect();
        }
    }
     
时间: 2024-11-08 23:34:08

android测试中如何控制wifi的相关文章

Android测试中能用到的一些脚本

做Android测试,有些事情需要经常地去做,比如截屏.录制视频(Android4.4新增功能).批量安装应用(sdk中的adb无法安装以中文命名的apk).批量卸载应用.获取应用对应的apk.包信息(包名.Activity,这里很多新手会不知道如何获取),因此有了这些脚本的产生,去年就有写过一些,放在了github上. 希望能对平时的测试过程会有些帮助! github: https://github.com/gb112211/AndroidTestScrpits.git

Android Studio中 ADB WIFI插件进行无线调试实践

首先要确保电脑和手机在同一个局域网中.具体步骤如下 1.Android Studio中安装ADB WIFI插件.安装成功后重启Android Studio.(没有安装过插件的同仁,请自己搜索) 2.手机USB连接电脑,在Android Studio中,点击Tools->Android->ADB WIFI->ADB USE to WIFI即可 3. 然后拔掉USB,运行即可. 第2步中,可能出现的问题,无法连接手机的IP. 解决办法: 在Android Studio Terminal中连接

Android测试:从零开始2——local单元测试

上一篇分析了android项目的测试分类,这一篇讲local单元测试. 参考android官方文档. 测试前需要配置测试环境,新建项目后,目录下会出现app/src/test/java/文件夹,这个文件夹是用于存放local单元测试代码的(就是与androidAPI无关的测试). 在build.gradle配置文件中增加测试依赖: dependencies { // Required -- JUnit 4 framework testCompile 'junit:junit:4.12' // O

Android Studio插件之_ADB WIFI

ADB WIFI这款插件可以免去我们频繁的插拔USB数据线的动作,通过绑定手机的无线IP,在AndroidStudio端可以直接运行Module到手机上,可以很方便的进行app调试和抓包. 第一步,在Android Studio中下载ADB WIFI插件. (通过File–>Settings,或者Ctrl+Alt+S呼出设置界面,选择Plugins–>Browse repositories..) 第二步,下载完毕后,根据系统提示,restart AndroidStudio. 第三步,用USB数

Android测试三----TestSuite分析。

android中说TestSuite是Tests的混合物.这里的测试类,我们可以把它理解为很多的测试类. 我们可以通过TestSuite去收集一堆测试用例,然后去运行她们. 1. android中给出了动态往TestSuite中添加测试用例的方式: TestSuite suite= new TestSuite(); suite.addTest(new MathTest("testAdd")); suite.addTest(new MathTest("testDivideByZ

Android中如何控制LogCat的自定义输出

在Android开发中,LogCat是一个非常重要的调试工具,可以输出很多关于项目或者手机的信息.但是正是由于LogCat功能的过于强大,输出的信息量也是极为庞大的,那么我们就需要通过一定的方式根据我们的需要限定LogCat的输出,这样才能使LogCat帮我们起到更好的调试代码的作用. LogCat输出的类型一般有五种,分别是verbose,debug,info,warn,error.其中verbose的最为宽泛,如果选择verbose,那么就会向下兼容输出verbose,debug,info,

Android Day02-Android中单元测试(junit测试)&monkey测试

Android中junit测试有2种实现方式 第1种:一般Android工程的实现方式 1.在清单文件中添加2项内容 首先在AndroidManifest.xml中加入下面红色代码: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.action" android:versionCode="1"  android:v

在Android studio中进行单元测试和ui测试

1.配置支持单元测试的工程 在写测试之前,让我们做下简单的检查,确保工程配置正确. 首先,确认在Build Variants窗口内的Test Artifact中选择了"Unit Tests". 然后,在工程的src文件夹内创建test和test/java文件夹.需要注意的是,你不能在Android视图下进行这些操作,要么在系统的文件管理器内创建,要么在工程窗口左上方点击下拉菜单选择Project视图.最终的工程结构应该是这样的: (在codelab的剩余部分,你可以返回继续使用Andr

【转载】App测试中ios和Android的区别:

App测试中ios和Android的区别: 1.        Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.        多分辨率测试,Android端20多种,ios较少: 3.        手机操作系统,Android较多,ios较少且不能降级,只能单向升级:新的ios系统中的资源库不能完全兼容低版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash): 4.        操作习惯:Android,Back键是