使用Android studio分析运行CTS用例

本帖已被设为精华帖!,

CTS的用例其实是个大宝库,是写单元测试的典范,研究和学习这些用例的内容不管是对Android系统的研究还是对个人的技术提升都是很有帮助的。但是网络上对于这部分的介绍却很少,都只是讲怎么运行CTS用例,没有去深究这些case到底测了什么。这里仅抛砖迎玉,我们先从搭建环境开始。

必备材料:
1.Android源代码一套(没有的同学参考我另外一篇帖子,我在百度盘共享了全套源码)
2.此套源码要完成编译过程(我这里用的是Android4.4.4的源码,使用64位ubuntu14.04发行版编译,安装了必要的依赖后直接编译完成,全程无错,无需修改任何源代码文件)

下面我们以WIFI模块的测试用例为例。
WIFI模块的测试用例在~/cts/tests/tests/net目录下,我们看下这个目录的结构:

├── AndroidManifest.xml
├── Android.mk
├── jni
│   ├── Android.mk
│   └── NativeDnsJni.c
└── src
└── android
└── net
├── cts
│   ├── ConnectivityManagerTest.java
│   ├── CredentialsTest.java
│   ├── DhcpInfoTest.java
│   ├── DnsTest.java
│   ├── LocalServerSocketTest.java
│   ├── LocalSocketAddress_NamespaceTest.java
│   ├── LocalSocketAddressTest.java
│   ├── LocalSocketTest.java
│   ├── MailToTest.java
│   ├── NetworkInfo_DetailedStateTest.java
│   ├── NetworkInfo_StateTest.java
│   ├── NetworkInfoTest.java
│   ├── ProxyTest.java
│   ├── SSLCertificateSocketFactoryTest.java
│   ├── TrafficStatsTest.java
│   ├── Uri_BuilderTest.java
│   ├── UriTest.java
│   ├── UrlQuerySanitizer_IllegalCharacterValueSanitizerTest.java
│   ├── UrlQuerySanitizer_ParameterValuePairTest.java
│   ├── UrlQuerySanitizerTest.java
│   └── VpnServiceTest.java
├── http
│   └── cts
│   ├── ApacheHttpClientTest.java
│   ├── SslCertificate_DNameTest.java
│   ├── SslCertificateTest.java
│   └── SslErrorTest.java
├── ipv6
│   └── cts
│   └── PingTest.java
├── rtp
│   └── cts
│   ├── AudioCodecTest.java
│   ├── AudioGroupTest.java
│   └── AudioStreamTest.java
└── wifi
└── cts
├── ConcurrencyTest.java
├── NsdManagerTest.java
├── ScanResultTest.java
├── SupplicantStateTest.java
├── WifiConfigurationTest.java
├── WifiEnterpriseConfigTest.java
├── WifiFeature.java
├── WifiInfoTest.java
├── WifiManagerTest.java
└── WifiManager_WifiLockTest.java

把net目录单独拷贝一份,开始动手了,可以看到net目录下还包含其他如http、ipv6等模块的用例,我们只想分析wifi模块的,其它不需要,删掉,目录结构变成这样:

├── AndroidManifest.xml
├── Android.mk
└── src
└── android
└── net
└── wifi
└── cts
├── ConcurrencyTest.java
├── NsdManagerTest.java
├── ScanResultTest.java
├── SupplicantStateTest.java
├── WifiConfigurationTest.java
├── WifiEnterpriseConfigTest.java
├── WifiFeature.java
├── WifiInfoTest.java
├── WifiManagerTest.java
└── WifiManager_WifiLockTest.java

我们要导入Android studio进行分析,所以要稍微改造下使它像一个Android项目,我们在src下添加bin、gen、libs三个文件夹,最后变成这样:

├── AndroidManifest.xml
├── Android.mk
├── bin
├── gen
├── libs
└── src
└── android
└── net
└── wifi
└── cts
├── ConcurrencyTest.java
├── NsdManagerTest.java
├── ScanResultTest.java
├── SupplicantStateTest.java
├── WifiConfigurationTest.java
├── WifiEnterpriseConfigTest.java
├── WifiFeature.java
├── WifiInfoTest.java
├── WifiManagerTest.java
└── WifiManager_WifiLockTest.java

很眼熟吧,没错,这就是eclipse下面的Android项目结构,只不过少了几个其他的assert,res之类的文件夹而已,但我们不想用eclipse,而分析这样的代码用gradle项目结构又很麻烦,所以下面讲如何把eclipse项目原样导入Android studio。

把eclipse项目导入Android studio:
1.file->open打开项目
使用Android studio分析运行CTS用例

2.打开module setting
使用Android studio分析运行CTS用例

3.设置project
使用Android studio分析运行CTS用例

4.添加source文件夹
使用Android studio分析运行CTS用例

5.把gen文件夹也添加进去
使用Android studio分析运行CTS用例

6.点一下gen最右边的P,在弹出的对话框中勾选For generated sources
使用Android studio分析运行CTS用例
使用Android studio分析运行CTS用例

7.Dependencies界面把SDK设置为19
使用Android studio分析运行CTS用例

8.新建一个Android
使用Android studio分析运行CTS用例

9.structure界面把各个文件夹设置正确,源码文件夹中没有res和assets没有关系,这里不影响
使用Android studio分析运行CTS用例

10.Generated Sources中设置gen目录
使用Android studio分析运行CTS用例

11.把4个依赖的jar包拷贝到源码libs目录下,然后在Libraries中添加依赖的jar包,WIFI模块一共依赖4个jar包,这里添加3个
使用Android studio分析运行CTS用例
使用Android studio分析运行CTS用例

说明:
3个classes开头的jar包都在编译完成的out文件夹下,这里手动改了名字而已
classes-cts.jar对应~/out/target/common/obj/JAVA_LIBRARIES/ctstestrunner_intermediates/classes.jar
classes-deviceutil.jar对应~/out/target/common/obj/JAVA_LIBRARIES/ctsdeviceutil_intermediates/classes.jar
classes-framework.jar对应~/out/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/classes.jar
junit-4.10.jar网上随便能下载到

12.在SDKs中修改Build target为19,并且把classes-framework.jar添加进来,且一定要在android.jar的前面,这是因为framework.jar中有一些系统的隐藏方法,所以要放在公用API android.jar的前面被调用
使用Android studio分析运行CTS用例

13.编辑Configurations
使用Android studio分析运行CTS用例

14.新建一个Android Tests
使用Android studio分析运行CTS用例

15.重命名,并选择runner为CtsTestRunner
使用Android studio分析运行CTS用例

16.项目-右键-开始RUN RUN RUN
使用Android studio分析运行CTS用例
使用Android studio分析运行CTS用例

17.测试结束,可以看到我的设备fail了一条用例
使用Android studio分析运行CTS用例

这样,我们完成了在Android studio运行CTS用例的过程,在Android studio中运行测试用例好处是方便调试,比如随便断点,方便阅读,方便修改,语法纠错blablablabla……
如果我们想新写一些用例,也可以在外面写好再弄到源码里配置mk文件编译。
至于不同的模块,可能依赖的jar包不同,但肯定都在~/out/target/common/obj/JAVA_LIBRARIES下被编译出来了,所以如果有同学调试其他的模块因为依赖报错的时候,可以根据出错信息到这个目录下去找。

* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除